-3

PHPとjsonリクエストを使用して、Androidからmysqlにデータを挿入しています。イベントが発生すると、logcat で例外が発生します。私は私の clogcat をあなたと共有しているので、あなたは何が起こっているのかをよりよく見て理解することができます. ここに私の logcat があります:

10-07 03:55:13.073: E/AndroidRuntime(1665): 致命的な例外: メイン 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.getAllByNameImpl(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.open(AbstractPooledConnAdapter.java で:119) 10-07 03:55:13.073: E/AndroidRuntime(1665): org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.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.073: E/AndroidRuntime(1665): atジャバ。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(ネイティブ メソッド) でZygoteInit.main (ZygoteInit.java:553) 10-07 03:55:13.073: E/AndroidRuntime (1665): dalvik.system.NativeStart.main (ネイティブ メソッド) でZygoteInit.main (ZygoteInit.java:553) 10-07 03:55:13.073: E/AndroidRuntime (1665): dalvik.system.NativeStart.main (ネイティブ メソッド) で

4

3 に答える 3

1

このエラーは、メイン スレッド、つまりアプリケーションの UI スレッドでネットワーク呼び出し (Web サービス呼び出しを行う) を処理しているときに発生します。

AsyncTask または Handler を使用して、Web サービス呼び出しを管理します。

この回答を参照してください

あなたの非同期タスククラスは次のようになります

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について

そして、次のようなハンドラを使用できます:

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

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

AsyncTaskの使用は、より優れたソリューションです。

于 2013-10-07T08:10:51.170 に答える
0

AsyncTask または Thread を使用して webservice を呼び出し、アプリケーションからデータを送信します。

于 2013-10-07T08:17:19.633 に答える