Altane
Altane

Reputation: 11

FatalShutdown in Android with httpurlconnection

I'm actually srugling with my application using HttpUrlConnection, I tried the simplest code found on the internet and still got a FatalShutDown in the logcat and I don't understand the problem.

Here is the code :

try {
     URL url = new URL("http://www.android.com/");
     HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
     InputStream in = new BufferedInputStream(urlConnection.getInputStream());
     BufferedReader r = new BufferedReader(new InputStreamReader(in));
     StringBuilder total = new StringBuilder();
     String line;
     while ((line = r.readLine()) != null) {
           total.append(line).append('\n');
     }
     response_textview.setText(total.toString());
     urlConnection.disconnect();
 }
 catch (MalformedURLException e){
      response_textview.setText(e.getMessage());
 }
 catch (IOException e){
      response_textview.setText(e.getMessage());
 }

And I got this in the logcat :

Logcat error

Thanks

Upvotes: 0

Views: 50

Answers (3)

PEHLAJ
PEHLAJ

Reputation: 10116

You shouldn't perform network operation on main thread. Use AsyncTask.

1. Create AsyncTask object and move your code into doInBackground method as mentioned below:

AsyncTask task = new AsyncTask<Void,String,String>(){

    @Override
    protected String doInBackground(Void... params) {
    // perform your network operation here and return response

       try {
           URL url = new URL("http://www.android.com/");
           HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
           InputStream in = new BufferedInputStream(urlConnection.getInputStream());
           BufferedReader r = new BufferedReader(new InputStreamReader(in));
           StringBuilder total = new StringBuilder();
           String line;
           while ((line = r.readLine()) != null) {
                total.append(line).append('\n');
           }

           urlConnection.disconnect();
       }
       catch (MalformedURLException e){
            return e.getMessage();
       }
       catch (IOException e){
            return e.getMessage();
       }
       return total.toString();

    }

    protected void onPostExecute(String response){
             // response returned by doInBackGround() will be received 
             // by onPostExecute(String response)
              response_textview.setText(response);
    }

  };

2. Execute task

 task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

Upvotes: 1

Master Disaster
Master Disaster

Reputation: 759

You need to make request in new thread. Probably, your code (it is only try catch) is running on main thread. This operation is denied. Try to use e.g. Thread.class to make request in new thread.

Upvotes: 1

valdvit
valdvit

Reputation: 267

Wrap your code with Asynktask doInBackground() method.

Upvotes: 1

Related Questions