0

I have used asynctask in my code. But it is showing the error that i have given in the logcat.I have created a google api emulator of api 18.in that it is not working.but working in api8. whether it will work in real device of any version?

btnLogin.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                new LoginTask_1().execute();
            }
        });

asynctask

class LoginTask_1 extends AsyncTask<String, String, String> {

        /**
         * Before starting background thread Show Progress Dialog
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(RegisterActivity.this);
            pDialog.setMessage("loging in...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }

        /**
         * Deleting product
         * */
        protected String doInBackground(String... args) {
            runOnUiThread(new Runnable() {
                public void run() {
                    String code = inputcode.getText().toString();
                    UserFunctions userFunction = new UserFunctions();
                    Log.d("Button", "Login");
                    JSONObject json = userFunction.loginUser1(id,code);

                    // check for login response
                    try {
                        if (json.getString(KEY_SUCCESS) != null) {
                            loginErrorMsg1.setText("");
                            String res = json.getString(KEY_SUCCESS); 
                            if(Integer.parseInt(res) == 1){
                                DatabaseHandler1 db = new DatabaseHandler1(getApplicationContext());
                                db.addUser(adduser1, adduser2,id, adduser3,adduser4);

                                // Launch Dashboard Screen
                                Intent dashboard = new Intent(getApplicationContext(), MainActivity.class);
                                dashboard.putExtra("name", id);
                                dashboard.putExtra("email", adduser4);
                                //dashboard.putExtra(EXTRA_MESSAGE, id);
                                // Close all views before launching Dashboard
                                dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                startActivity(dashboard);

                                // Close Login Screen
                                finish();
                                }

                            /*else if(Integer.parseInt(res) == 2){

                                loginErrorMsg.setText("Already logged in");
                            }*/
                            else{
                                // Error in login
                                loginErrorMsg1.setText("Invalid Code");
                            }
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            });
            return null;
        }

        /**
         * After completing background task Dismiss the progress dialog
         * **/
        protected void onPostExecute(String file_url) {
            // dismiss the dialog once product deleted
            pDialog.dismiss();

        }

    }

logcat

03-21 06:47:54.403: E/AndroidRuntime(3265): FATAL EXCEPTION: main
03-21 06:47:54.403: E/AndroidRuntime(3265): android.os.NetworkOnMainThreadException
03-21 06:47:54.403: E/AndroidRuntime(3265):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at java.net.InetAddress.getAllByName(InetAddress.java:214)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at com.androidhive.pushnotifications.JSONParser.getJSONFromUrl(JSONParser.java:47)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at com.androidhive.pushnotifications.UserFunctions.loginUser(UserFunctions.java:46)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at com.androidhive.pushnotifications.LoginActivity$LoginTask$1.run(LoginActivity.java:125)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at android.os.Handler.handleCallback(Handler.java:730)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at android.os.Looper.loop(Looper.java:137)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at android.app.ActivityThread.main(ActivityThread.java:5103)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at java.lang.reflect.Method.invokeNative(Native Method)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at java.lang.reflect.Method.invoke(Method.java:525)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-21 06:47:54.403: E/AndroidRuntime(3265):     at dalvik.system.NativeStart.main(Native Method)
user3256431
  • 167
  • 5
  • 15
  • probably `loginErrorMsg1.setText("");` line causing `NetworkOnMainThreadException` also remove `runOnUiThread` from doInBackground – ρяσѕρєя K Mar 21 '14 at 10:57
  • possible duplicate of [android.os.NetworkOnMainThreadException](http://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception) – N Sharma Mar 21 '14 at 10:58

1 Answers1

1

Remove runOnUiThread

runOnUiThread(new Runnable() {
            public void run() {

Your doInbackground is invoked on the background thread. You don't need runOnUiThread to do network operation.

And return result in doInbackground and startActivity in onPostExecute.

Edit:

As already suggest by prosper k upadate ui in onPostExecute not in doInbackground

  loginErrorMsg1.setText("Invalid Code");

Also you could get text from EditText in Activity and pass the string to doInbackground

   btnLogin.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {
            String code = inputcode.getText().toString();
            new LoginTask_1().execute(code);
        }
    });

Then

   protected String doInBackground(String... args) {
   String value = args[0];  
Raghunandan
  • 132,755
  • 26
  • 225
  • 256