0

I have a simple activity that sends an email and a password to a server and the server returns the next JSON:

{
   "token": "mytoken"
}

I'm doing the request on a different thread (AsyncTask), but my code is throwing the next exception:

android.os.NetworkOnMainThreadException
            at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
            at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:163)
            at libcore.io.IoBridge.recvfrom(IoBridge.java:506)
            at java.net.PlainSocketImpl.read(PlainSocketImpl.java:489)
            at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
            at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:241)
            at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103)
            at org.apache.http.impl.io.SocketInputBuffer.isDataAvailable(SocketInputBuffer.java:80)
            at org.apache.http.impl.io.IdentityInputStream.available(IdentityInputStream.java:63)
            at org.apache.http.conn.EofSensorInputStream.available(EofSensorInputStream.java:196)
            at java.io.InputStreamReader.read(InputStreamReader.java:223)
            at com.google.gson.stream.JsonReader.fillBuffer(JsonReader.java:1300)
            at com.google.gson.stream.JsonReader.nextNonWhitespace(JsonReader.java:1346)
            at com.google.gson.stream.JsonReader.consumeNonExecutePrefix(JsonReader.java:1582)
            at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:538)
            at com.google.gson.stream.JsonReader.peek(JsonReader.java:429)
            at com.google.gson.Gson.fromJson(Gson.java:806)
            at com.google.gson.Gson.fromJson(Gson.java:748)
            at com.myapp.evalatuclase.evaluacion.LoginActivity$LoginOperation.onPostExecute(LoginActivity.java:67)
            at com.myapp.evalatuclase.evaluacion.LoginActivity$LoginOperation.onPostExecute(LoginActivity.java:47)
            at android.os.AsyncTask.finish(AsyncTask.java:632)
            at android.os.AsyncTask.access$600(AsyncTask.java:177)
            at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5086)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)

Here is my code:

LoginActivity.java

package com.myapp.evalatuclase.evaluacion;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.google.gson.Gson;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;


public class LoginActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        Button login = (Button) findViewById(R.id.ingresar);

        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                EditText email = (EditText) findViewById(R.id.matriculaOemail);
                EditText password = (EditText) findViewById(R.id.password);
                params.add(new BasicNameValuePair("email",email.getText().toString()));
                params.add(new BasicNameValuePair("password",password.getText().toString()));
                new LoginOperation().execute(params);
            }
        });
    }




    private class LoginOperation extends AsyncTask<List<NameValuePair>,Void,Reader>{

        @Override
        protected  Reader doInBackground(List<NameValuePair>... params){
            try{
                HttpBasicRequestService http = new HttpBasicRequestService();
                Reader reader = new InputStreamReader(http.makePost("/auth/login/", "",params[0]));
                return  reader;
            }catch (Exception ex){
                Log.d("EVALUA_TU_CLASE", "Error "+ ex.toString());
            }

            return null;
        }

        @Override
        protected void onPostExecute(Reader reader) {
                super.onPostExecute(reader);
                Gson gson = new Gson();
                Log.d("EVALUA_TU_CLASE", "Creando json");
                LoginJSON token = gson.fromJson(reader,LoginJSON.class); // In this line is where the exception is throwed :C
                Log.d("EVALUA_TU_CLASE", "JSON");
                Log.d("EVALUA_TU_CLASE", token.token);


            //getSharedPreferences("EVALUA_TU_PROFESOR", Context.MODE_PRIVATE);

        }
    }
}

HttpBasicRequestService.java

package com.myapp.evalatuclase.evaluacion;

import android.util.Log;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;

public class HttpBasicRequestService {

    public InputStream makeGet(String url, String tokenUser) {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet getRequest = new HttpGet(Constants.URL_WEB_SERVICE.concat(url));
        getRequest.addHeader("Authorization", "JWT ".concat(tokenUser));
        try {
            HttpResponse getResponse = client.execute(getRequest);
            final int statusCode = getResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK) {
                Log.w(getClass().getSimpleName(),
                        "Error " + statusCode + " for URL " + url);
                return null;
            }
            HttpEntity getResponseEntity = getResponse.getEntity();
            return getResponseEntity.getContent();
        }
        catch (IOException e) {
            getRequest.abort();
            Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
        }
        return null;
    }


    public InputStream makePost(String url,String tokenUser, List<NameValuePair> params ){
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(Constants.URL_WEB_SERVICE.concat(url));
        post.addHeader("Authorization", "JWT ".concat(tokenUser));
        try{
            post.setEntity(new UrlEncodedFormEntity(params));
        }catch (UnsupportedEncodingException e){
            Log.e("EVALUA_TU_CLASE", e.toString());
        }
        try {
            HttpResponse getResponse = client.execute(post);
            final int statusCode = getResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK) {
                Log.w(getClass().getSimpleName(),
                        "Error " + statusCode + " for URL " + url);
                return null;
            }
            HttpEntity getResponseEntity = getResponse.getEntity();
            return getResponseEntity.getContent();
        }
        catch (IOException e) {
            post.abort();
            Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
        }
        return null;
    }

}

LoginJSON.java

package com.myapp.evalatuclase.evaluacion;

public class LoginJSON {

    public String token;

}

Any help would be appreciated!

Thanks in advance!

Victor Castillo Torres
  • 10,581
  • 7
  • 40
  • 50

0 Answers0