2013-10-07 5 views
-3

나는 PHP와 json 요청을 사용하여 MySQL에 안드로이드에서 데이터를 삽입하고있다. 이벤트가 발생하면 logcat에서 예외가 발생합니다.안드로이드에서 PHP로 삽입

10-07 : 03 : 55 : 13.073 : E/AndroidRuntime (1665) : 치명적인 예외 더 나은 모양과 무슨 일이 일어나고 있는지의 생각을 가질 수 있도록 내가 당신과 함께 내 clogcat를 공유하고, 여기에 내 로그 캣입니다 : 메인 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : android.os.NetworkOnMainThreadException 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork (StrictMode.java:1133) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : java.net.InetAddress.lookupHostByName (InetAddress.java:385) 10-07 03:55 : 13.073 : E/AndroidRuntime (1665) : java.net.InetAddress.ge tAllByNameImpl (InetAddress.java:236) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : java.net.InetAddress.getAllByName (InetAddress.java:214) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection (DefaultClientConnectionOperator.java:137) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : org에서 .apache.http.impl.conn.AbstractPoolEntry.open (AbstractPoolEntry.java:164) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : org.apache.http.impl.conn.AbstractPooledConnAdapter. (AbstractPooledConnAdapter.java:119) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : 에서 org.apache.http.impl.client.DefaultRequestDirector.execute (Defaul tRequestDirector.java:360) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : 에서 org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:555) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:487) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:465) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : com.example.receiptorganizer.Registration $ 1 .insert (Registration.java:78) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : com.example.receiptorganizer.Registration $ 1.onClick (Registration.java:58) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : android.view.View.performClick (View.java:4240) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : android.view.View $ PerformClick.run (View.java:17721) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : android.os.Handler.handleCallback (Handler.java:730)) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : android.os.Handler.dispatchMessage (Handler.java:92) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : 에서 android.os.Looper.loop (Looper.java:137) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : 에서 android.app.ActivityThread.main (ActivityThread.java:5103) 10-07 03 : 55 : 13.07 3 : E/AndroidRuntime (1665) : java.lang.reflect.Method.invokeNative (네이티브 메소드) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : java.lang.reflect.Method .invoke (Method.java:525) 10-07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : 에서 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:737) 10 -07 03 : 55 : 13.073 : E/AndroidRuntime (1665) : com.android.internal.os.ZygoteInit.main (ZygoteInit.java:553) 10-07 03:55:13.073 : E/AndroidRuntime (1665) : dalvik.system.NativeStart.main (기본 방법) 메인 스레드 예에서 네트워크 호출 (A 웹 서비스 호출을)에서 처리 할 때

+0

다른 문제를 해결하기 전에이 문제에 좀 더 집중해야한다고 생각합니다. Google에 'android.os.NetworkOnMainThreadException'을 붙여 넣기 만하면 답변을 얻을 수 있습니다. 아래 표를 이해하려면 [help] (http://stackoverflow.com/help) 페이지를 참조하십시오. :) – Qben

답변

1

이 오류가 온다에서 응용 프로그램의 UI 스레드

웹 서비스 호출을 관리하려면 AsyncTask 또는 Handler를 사용하십시오.

Handler handler = new Handler(); 
handler.post(new Runnable() { 

    @Override 
    public void run() { 
    // TODO Auto-generated method stub 
    // network call here 
     } 
    }); 

사용 :

answer

귀하의 비동기 작업 클래스는이 같은이

class TheTask extends AsyncTask<Void,Void,Void> 
{ 
      protected void onPreExecute() 
      {   super.onPreExecute(); 
        //display progressdialog. 
      } 

      protected void doInBackground(Void ...params) 
      { 
       //http request. do not update ui here 

       return null; 
      } 

      protected void onPostExecute(Void result) 
      {  
        super.onPostExecute(result); 
        //dismiss progressdialog. 
        //update ui 
      } 

} 

에 대한 AsyncTaskHandler

그리고 당신이 사용할 수있는 핸들러처럼 될 수 있습니다 참조 AsyncTask이 더 나은 솔루션입니다.

+0

고마워요, 그럼 그게 가장 좋은 해결책이 될까요? – geekdev786

+0

답변을 업데이트했습니다. 참조하십시오 – Shruti

+0

@shurti 지금 당장은 오류 예외가 없지만 시뮬레이터는 응용 프로그램이 느린 인터넷 또는 기타 문제로 인해 작동을 멈췄다 고 말했습니다. – geekdev786

0

구글 android.os.NetworkOnMainThreadException에서이 예외를 찾아 아니면 그냥 tutroial

0

사용 AsyncTask를을 따르거나 응용 프로그램에서 데이터를 전송하는 웹 서비스를 호출하는 스레드하시기 바랍니다.

관련 문제