Question

I am creating an app that will access and fetch the data from server thus application works fine and running as expected in GingerBread(2.3.5) but it crashes in JellyBeans(4.1.2). It generates the following error

12-19 14:46:12.027: I/System.out(10088): Domain has been set

12-19 14:46:12.082: I/System.out(10088): Created http client

12-19 14:46:12.093: I/System.out(10088): Created the httppost domain

12-19 14:46:12.097: I/System.out(10088): Response has been initalized by null

12-19 14:46:12.101: I/System.out(10088): Added the parameter  email

12-19 14:46:12.101: I/System.out(10088): Added the parameter  Password

12-19 14:46:12.136: I/System.out(10088): Setting the entity

12-19 14:46:12.218: D/AndroidRuntime(10088): Shutting down VM

12-19 14:46:12.218: W/dalvikvm(10088): threadid=1: thread exiting with uncaught   exception (group=0x40ca4300)

12-19 14:46:12.257: E/AndroidRuntime(10088): FATAL EXCEPTION: main

12-19 14:46:12.257: E/AndroidRuntime(10088): android.os.NetworkOnMainThreadException

12-19 14:46:12.257: E/AndroidRuntime(10088):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at java.net.InetAddress.lookupHostByName(InetAddress.java:385)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at java.net.InetAddress.getAllByName(InetAddress.java:214)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at com.yousaf.naveed.CommunicationClass.trydata(CommunicationClass.java:96)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at com.yousaf.naveed.signin.senddata(signin.java:86)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at com.yousaf.naveed.signin$1.onClick(signin.java:57)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at android.view.View.performClick(View.java:4084)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at android.view.View$PerformClick.run(View.java:16966)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at android.os.Handler.handleCallback(Handler.java:615)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at android.os.Handler.dispatchMessage(Handler.java:92)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at android.os.Looper.loop(Looper.java:137)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at android.app.ActivityThread.main(ActivityThread.java:4745)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at java.lang.reflect.Method.invokeNative(Native Method)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at java.lang.reflect.Method.invoke(Method.java:511)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)

12-19 14:46:12.257: E/AndroidRuntime(10088):    at dalvik.system.NativeStart.main(Native Method)

12-19 14:46:12.285: W/ActivityManager(248):   Force finishing activity com.yousaf.naveed/.signin

12-19 14:46:12.820: W/ActivityManager(248): Activity pause timeout for ActivityRecord{41479970 com.yousaf.naveed/.signin}

The code for Signin is as

protected void senddata() {
    int status = 0,role=0;
    int active=0;
    // TODO Auto-generated method stub
    @SuppressWarnings("unused")
    String JSONString = null;
    ccobj = new CommunicationClass();
    ccobj.setDomain("http://naveedyousaf.com/fyp/cakephp-master/cakephp-master/Users/signin");
    ccobj.setClient();
    ccobj.startpost(ccobj.Domain);
    ccobj.setResponse();
    ccobj.insertdata("email", email);
    ccobj.insertdata("Password", password);
    ccobj.trydata();
    ccobj.setreader();
    ccobj.setStringBuilder();   
    ccobj.readresponse();
    JSONString = new String(ccobj.builder);

        String first_name = null,last_name = null,emails=null,password=null,emer=null; 
        try {
            status = ccobj.finalResult.getInt("status");
            first_name = ccobj.finalResult.getString("First_Name");
            last_name = ccobj.finalResult.getString("Last_Name");
            emails = ccobj.finalResult.getString("Email");
            password = ccobj.finalResult.getString("Password");
            role =   ccobj.finalResult.getInt("Role");
            //active = ccobj.finalResult.getInt("Active");
            ids = ccobj.finalResult.getInt("Id");
            System.out.print("============="+ids);
            emer = ccobj.finalResult.getString("Emergency");

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            System.out.println("In the issue itself");
            e.printStackTrace();
        }
        error=(TextView) this.findViewById(R.id.error);
        System.out.println(status);
        if(status==2){
            try{
                error.setTextColor(Color.RED);
                error.setText("Unrecognized Email");
                error.setTextSize(12);
                fpass.setTextColor(Color.RED);
                fpass.setTextSize(12);
                //pd.cancel();
            }
            catch(NullPointerException e){
                System.out.println("This is the uncaught exception");
            }

            //error.text.setTextColor(Color.rgb(200,0,0));
        }
        if(status==1){
            dcobj = new DataClass();
            //ids = Integer.parseInt(id);
            dcobj.setFirstName(first_name);
            dcobj.setLastName(last_name);
            dcobj.setEmail(emails);
            dcobj.setPassword(password);
            dcobj.setRole(role);
            dcobj.setStatus(status);
            dcobj.setActive(active);
            dcobj.setId(ids);
            dcobj.setEmer(emer);
            sendnewdata();
        }

}

The code for Communication class is as below

public void setreader(){
    try {
        reader = new BufferedReader(new InputStreamReader(this.response.getEntity().getContent(), "UTF-8"));
        System.out.println("Setting the contents of the Reader");
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        System.out.println("In the UnsupportedEncodingException catch of the Reader");
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        System.out.println("In the IllegalStateException catch of the Reader");
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        System.out.println("In the IOException catch of the Reader");
        e.printStackTrace();
    }

}
public void startpost(String str){
    datapost=new HttpPost(str);
    System.out.println("Created the httppost domain");
}
public void insertdata(String tag,String value){
    namevaluepairs.add(new BasicNameValuePair(tag,value));
    System.out.println("Added the parameter  "+tag);
}

public void trydata(){
    try {
        this.datapost.setEntity(new UrlEncodedFormEntity(this.namevaluepairs));
        System.out.println("Setting the entity");

        try {
            //HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
            this.response = this.client.execute(this.datapost);
            System.out.println("executing the client");
             if(this.response != null){
                 System.out.println("i am in if of this.response!=null");
             }
             else{
                 System.out.println("i am in else of this.response!=null");
             }
             System.out.println("in response try box");
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            System.out.println("in ClientProtocolException Catch box");
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            System.out.println("in IOException Catch box");
            e.printStackTrace();
        }
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        System.out.println("in UnSupported Catch box");
        e.printStackTrace();
    }
}
public void readresponse(){     



    try {
        for (String line = null; (line = reader.readLine()) != null;) {
            builder.append(line).append("\n");

        }
        System.out.println(this.builder);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     tokener = new JSONTokener(builder.toString());
    try {
         finalResult = new JSONObject(tokener);
        System.out.println("I am in try block of json final result reading");
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        System.out.println("I catch block of jsonException");
        e.printStackTrace();
    } 
}

its Manifest file has the following permissions

 <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

Please can anyone explain me why is it crashing what exception is not handled.

I am having the main activity of sign in but this signin class is calling the CommunicationClass which is executing the httpclient protocol with post method signin does not execute the httpclient itself but it is waiting to execute that so then why i do need Async task.

Was it helpful?

Solution

Do your network operations on a background thread or disable StrictMode

Instead of calling senddata as you currently do (I don't know which function you're calling it from, but that function is running on the UI thread), try calling it in an AsyncTask like this:

  someFunctionOnTheUIThread()
  {
    //senddata(); //this is your current senddata() call. Replace it with the following

    (new AsyncTask<Void, Void, Void>() {

        @Override
        protected Void doInBackground(Void... params) {
            senddata();
            return null;
        }
    }).execute((Void)null);
  }

As stated in the beginning, you can also disable StrictMode, but it's highly unrecommended as it'll block the UI, you'll get ANRs (Application Not Responding) when the network is slow (or the request "hangs" - it can happen even on good networks and, if it does, the default timeout for the request is, AFAIK and assuming you haven't changed it, 30 seconds ).

Please look at other questions asked about this on StackOverflow. There are a lot of useful and more detailed answers for this. Also, for future questions, please check to see if your question has already been asked here by another person before posting it. It'll lower the amount of duplicate questions and it won't get you down-voted (and your question closed and marked as a duplicate).

OTHER TIPS

at android.os.StrictMode$AndroidBlockGuardPolicy.

You have strict mode enabled. disable it or try to perform the network operations in a separate thread.

Network request in UI thread is not allowed above android 4.0. You should new a thread to do it.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top