2016-07-21 6 views
0

ログインアクティビティでandroid.os.NetworkOnMainThreadExceptionが表示されています。基本的には、ユーザーが入力したユーザーIDとパスワードが正しいかどうか、つまりユーザーがサインインできるかどうかを確認しようとしています。私は解決策を探して、例外がメインスレッド上のネットワーキングと関係があることを知っています。しかし、私はAsyncTaskを使用しています。私はまだこの例外を取得しています。ここに私のLoginActivity.javaが、これは重要ですが、私はデバッグをしようとしたdoInBackgroundメソッド内のブレークポイントを置くが、私のデバッガはちょうどブレークポイントを無視し、それだけで新しいCheckUserLogin().execute();を過ぎて吹く場合、私は知らないandroid.os.NetworkOnMainThreadExceptionアンドロイドのアクティビティからデータベースにアクセスしようとしています。 Android Studio

public class LoginActivity extends AppCompatActivity { 

    JSONParser jsonParser = new JSONParser(); 
    // single product url 
    private static final String url_user_check_login = "##########################/android_connect/db_connect.php"; 
    int success=0; 
    String id=""; 
    String password=""; 
    private static final String TAG_SUCCESS = "success"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

//  Defining onClickListener for Login Button 
     Button loginBtn=(Button) findViewById(R.id.login_btn); 
     loginBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
//    Check credentials 
       EditText phone=(EditText)findViewById(R.id.phone_txt); 
       EditText pwd=(EditText)findViewById(R.id.password_txt); 
       id=phone.getText().toString(); 
       password=pwd.getText().toString(); 
       new CheckUserLogin().execute(); 
       if (success == 1) { 

        Intent intent=new Intent(getApplicationContext(), RideDetailsActivity.class); 
        startActivity(intent); 

       }else{ 
        // product with id not found 
       } 
      } 
     }); 
    } 
    class CheckUserLogin extends AsyncTask<String, String, String> { 

     protected String doInBackground(String... params) { 

      // updating UI from Background Thread 
      runOnUiThread(new Runnable() { 
       public void run() { 
        // Check for success tag 

        try { 
         // Building Parameters 
         List<NameValuePair> params = new ArrayList<NameValuePair>(); 
         params.add(new BasicNameValuePair("id", id)); 

         // getting product details by making HTTP request 
         // Note that product details url will use GET request 
         JSONObject json = jsonParser.makeHttpRequest(
           url_user_check_login, "GET", params); 

         // check your log for json response 
//      Log.d("Single Product Details", json.toString()); 

         // json success tag 
         success = json.getInt(TAG_SUCCESS); 

        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }); 

      return null; 
     } 


    } 
} 

ですステートメント。

また、私の例外スタックトレースです。

FATAL EXCEPTION: main 
android.os.NetworkOnMainThreadException 
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1128) 
at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
at java.net.InetAddress.getAllByName(InetAddress.java:214) 
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:365) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:587) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:511) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:489) 
at com.heycabs.heycabs.JSONParser.makeHttpRequest(JSONParser.java:65) 
at com.heycabs.heycabs.LoginActivity$CheckUserLogin$1.run(LoginActivity.java:98)at android.os.Handler.handleCallback(Handler.java:800) 
at android.os.Handler.dispatchMessage(Handler.java:100) 
at android.os.Looper.loop(Looper.java:194) 
at android.app.ActivityThread.main(ActivityThread.java:5409) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606) 
at dalvik.system.NativeStart.main(Native Method) 
+1

あなたは 'RunOnUiThread()'でUIスレッド上のすべてを実行して、 'AsyncTask'を使う目的を完全に破っています。それで、あなたは 'NetworkOnMainThreadException'を取得しています。 –

+0

それを指摘してくれてありがとう。私はアンドロイドに慣れ親しんでおり、[this](http://www.androidhive.info/2012/05/how-to-connect-android-with-php-mysql/)チュートリアルを参考にしています。私は何を変えなければならないか教えていただけますか? –

答えて

0

Asynktaskを間違って使用しています。 success == 1は、同期コマンドがナノ秒で発生し、ネットワークが数ミリ秒かかるため、決して実行されません。

最後に、あなたが新しいスレッドを作成し、その中に、バックUI 1に行ってきました.... Asynk完了時にstartActivity(intent)を行います

runOnUiThread(new Runnable() 

をこれは正しくありません。 AsynkTaskに関するドキュメントをご覧ください。そして、read this example

+0

それを指摘してくれてありがとう。私はアンドロイドに慣れ親しんでおり、[this](http://www.androidhive.info/2012/05/how-to-connect-android-with-php-mysql/)チュートリアルを参考にしています。私は何を変えなければならないか教えていただけますか? –

+0

リンクしたチュートリアルから、AsynkTaskから 'doInBackground'と' onPostExecute'関数をチェックしてください。これらの関数は、使用される前関数と後関数です。私はまたあなたにGoogle Volleyを強く勧めます。そのネットワーク関連のライブラリは、ネットワーク操作のLOTSを容易にし、非常に使いやすいです。 – Bonatti

関連する問題