I have to do an http post for get a token which will give me permissions for use my app. The method(obtieneToken) which obtains this token its into the Asyntask Class beside to another methods. This method is called from another class no asynchronous which is called from the App activity. When my function arrives to the httpClient.execute(post) the index goes to the exception. I compared my app versus my web application and the web application works well. The next step was capture with Wireshark and... When i execute my app, my wlan interface does not receive any request from the app. Which can be the problem? Here is the code:
public class ObtencionDatosUsuario extends AsyncTask<Integer, Integer, Boolean> {
protected static User obtieneDatos(String url, String aut) {
// TODO Auto-generated method stub
HttpClient httpClient = new DefaultHttpClient();
HttpGet del = new HttpGet(url);// Se obtienen
// los datos de
// la url del
// usuario
del.setHeader("content-type", "application/json");
del.setHeader("X-Auth-Token",aut);// contenidoToken es el string que se obtiene de la respuesta del token
User usuario = new User();
try {
HttpResponse resp = httpClient.execute(del);
StatusLine estatus = resp.getStatusLine();
if (estatus.getStatusCode() == 200) {
InputStream is= null;
is = resp.getEntity().getContent();
usuario =(User) HalUnmarshaller.unmarshal(is, User.class);
} else {
System.out.println("Error");
usuario= null;
}
} catch (Exception ex) {
Log.e("ServicioRest", "Error!", ex);
}
return usuario;
}
protected static List<User> obtieneAmigos(String url, String aut) {
// TODO Auto-generated method stub
HttpClient httpClient = new DefaultHttpClient();
HttpGet del = new HttpGet(url);// Se obtienen los datos de la url del
// usuario
del.setHeader("content-type", "application/json");
del.setHeader("X-Auth-Token", aut);
List<User> friends = null;
HttpResponse resp;
try {
resp = httpClient.execute(del);
StatusLine estatus = resp.getStatusLine();
if(estatus.getStatusCode()==200){
InputStream is= null;
is = resp.getEntity().getContent();
friends= (List<User>) HalUnmarshaller.unmarshal(is, User.class);
return friends;
}else{
friends= null;
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return friends;
}
protected static List<GroupEvent> obtieneEventos(String url, String aut) {
// TODO Auto-generated method stub
HttpClient httpClient = new DefaultHttpClient();
HttpGet del = new HttpGet(url); // Se obtienen los datos de la url del usuario
del.setHeader("content-type", "application/json");
del.setHeader("X-Auth-Token",aut);
List<GroupEvent> eventos = null;
HttpResponse resp;
try {
resp = httpClient.execute(del);
StatusLine estatus = resp.getStatusLine();
if(estatus.getStatusCode() == 200){
InputStream is= null;
is= resp.getEntity().getContent();
eventos = (List<GroupEvent>) HalUnmarshaller.unmarshal(is, GroupEvent.class);
}else{
eventos= null;
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return eventos;
}
//getToken
protected static AuthToken obtieneToken(String nombre, String clave, String url){
// TODO Auto-generated method stub
AuthToken token= new AuthToken();
HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(url);// Solicitud token
int code;
String aut=nombre+":"+clave;
String conectionValue;
String codificada= Base64.encodeToString(aut.getBytes(), 0);
String coded= codificada.replace("\n", "");
System.out.println("nombre:clave= "+aut+" codificado es= "+coded);
post.setHeader("content-type", "application/json");
post.setHeader("Authorization", "Basic "+coded);
try {
HttpResponse resp = httpClient.execute(post);//Genera una excepcion
InputStream is= resp.getEntity().getContent();
if((code=resp.getStatusLine().getStatusCode())!=200){
token.setAuthToken("0");
}else{
token= (AuthToken) HalUnmarshaller.unmarshal(is, AuthToken.class);
System.out.println("Token recibido en obtencion: "+ token);
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {//Excepcion lanzad a por el post
// TODO Auto-generated catch block
e.printStackTrace();
}
return token;
}
@Override
protected Boolean doInBackground(Integer... params) {
// TODO Auto-generated method stub
return null;
}
}
This is the class which contains the Callers to the async methods:
public class ObtieneRecursos {
static String ip= "192.168.0.15";
public static User obtieneDatosUsuario(String aut, String who){
//Peticion get a /users/:id
String url= "http://"+ip+":8080/api/users/"+who;
User usuario= new User();
usuario= ObtencionDatosUsuario.obtieneDatos(url,aut);
return usuario;
}
public static AuthToken obtieneTokenMe(String nombre, String clave){
String url= "http://"+ip+":8080/api/auth-tokens/";
AuthToken token= new AuthToken();
token= ObtencionDatosUsuario.obtieneToken(nombre, clave, url);
return token;
}
}
Thanks a lot.
Edit: Log
03-11 13:31:39.272: I/ViewRootImpl(522): ViewRoot's Touch Event : Touch Down
03-11 13:31:39.312: I/ViewRootImpl(522): ViewRoot's Touch Event : Touch UP
03-11 13:31:46.472: I/System.out(522): Recibido mik.xx@gmail.com|xx
03-11 13:31:46.562: I/System.out(522): nombre:clave= mik.xx@gmail.com:xx codificado es= bWlrLmNvcmN1ZXJhQGdtYWlsLmNvbTpjb3JjdWVyYTkx
03-11 13:31:48.632: E/DataScheduler(522): isDataSchedulerEnabled():false
03-11 13:31:48.632: W/System.err(522): android.os.NetworkOnMainThreadException
03-11 13:31:48.642: W/System.err(522): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1148)
03-11 13:31:48.642: W/System.err(522): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
03-11 13:31:48.642: W/System.err(522): at libcore.io.IoBridge.connectErrno(IoBridge.java:176)
03-11 13:31:48.642: W/System.err(522): at libcore.io.IoBridge.connect(IoBridge.java:128)
03-11 13:31:48.642: W/System.err(522): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
03-11 13:31:48.642: W/System.err(522): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460)
03-11 13:31:48.642: W/System.err(522): at java.net.Socket.connect(Socket.java:833)
03-11 13:31:48.642: W/System.err(522): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
03-11 13:31:48.642: W/System.err(522): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
03-11 13:31:48.642: W/System.err(522): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
03-11 13:31:48.642: W/System.err(522): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
03-11 13:31:48.642: W/System.err(522): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
03-11 13:31:48.642: W/System.err(522): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
03-11 13:31:48.642: W/System.err(522): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
03-11 13:31:48.642: W/System.err(522): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
03-11 13:31:48.642: W/System.err(522): at com.example.modelo.ObtencionDatosUsuario.obtieneToken(ObtencionDatosUsuario.java:144)
03-11 13:31:48.642: W/System.err(522): at com.example.modelo.ObtieneRecursos.obtieneTokenMe(ObtieneRecursos.java:27)
03-11 13:31:48.652: W/System.err(522): at com.example.pestanasholacampus.InitActivity.compruebaUsuario(InitActivity.java:122)
03-11 13:31:48.652: W/System.err(522): at com.example.pestanasholacampus.InitActivity$2.onClick(InitActivity.java:68)
03-11 13:31:48.652: W/System.err(522): at android.view.View.performClick(View.java:4442)
03-11 13:31:48.652: W/System.err(522): at android.view.View$PerformClick.run(View.java:18473)
03-11 13:31:48.652: W/System.err(522): at android.os.Handler.handleCallback(Handler.java:733)
03-11 13:31:48.652: W/System.err(522): at android.os.Handler.dispatchMessage(Handler.java:95)
03-11 13:31:48.652: W/System.err(522): at android.os.Looper.loop(Looper.java:136)
03-11 13:31:48.652: W/System.err(522): at android.app.ActivityThread.main(ActivityThread.java:5105)
03-11 13:31:48.652: W/System.err(522): at java.lang.reflect.Method.invokeNative(Native Method)
03-11 13:31:48.652: W/System.err(522): at java.lang.reflect.Method.invoke(Method.java:515)
03-11 13:31:48.652: W/System.err(522): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
03-11 13:31:48.652: W/System.err(522): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
03-11 13:31:48.652: W/System.err(522): at dalvik.system.NativeStart.main(Native Method)
Edit 2: Now i have the code in doInBackground methods called from normal class:
public class ObtencionTokenUsuario extends AsyncTask<String, Integer, AuthToken> {
@Override
protected AuthToken doInBackground(String... datos) {
// TODO Auto-generated method stub
AuthToken token= new AuthToken();
HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(datos[2]);// Solicitud token
int code;
String aut=datos[0]+":"+datos[1];
String conectionValue;
String codificada= Base64.encodeToString(aut.getBytes(), 0);
String coded= codificada.replace("\n", "");
System.out.println("nombre:clave= "+aut+" codificado es= "+coded);
post.setHeader("content-type", "application/json");
post.setHeader("Authorization", "Basic "+coded);
try {
HttpResponse resp = httpClient.execute(post);//Genera una excepcion
InputStream is= resp.getEntity().getContent();
if((code=resp.getStatusLine().getStatusCode())!=200){
token.setAuthToken("0");
}else{
token= (AuthToken) HalUnmarshaller.unmarshal(is, AuthToken.class);
System.out.println("Token recibido en obtencion: "+ token);
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {//Excepcion lanzad a por el post
// TODO Auto-generated catch block
e.printStackTrace();
}
return token;
}
}
And the class:
public class ObtieneRecursos{
public static AuthToken obtieneTokenMe(String nombre, String clave){
String url= "http://"+ip+":8080/api/auth-tokens/";
String[] params= new String[3];
params[0]=nombre;
params[1]=clave;
params[2]=url;
System.out.println("nombre = "+params[0]);
System.out.println("clave = "+params[1]);
System.out.println("url = "+params[2]);
AuthToken token= new AuthToken();
ObtencionTokenUsuario du= new ObtencionTokenUsuario();
token=du.doInBackground(params);
return token;
}
}