我正在尝试使用Jersey制作的网络服务。 我通过从控制台java应用程序调用它来测试服务,它的工作非常好。
从Android调用时,它首先给了我android.os.NetworkOnMainThreadException,我搜索并发现我应该使用AsyncTask来解决这个问题,
当调用“response.getEntity(String.class)”时,以下代码崩溃 在调用get服务时,如果我返回状态(response.getStatus())而不是getEntity,它可以正常工作。但是在发布请求的情况下,同样的事情也不起作用。
上的getEntity()崩溃了 public String postTest(String arg){
Log.d("Service", "postRegister1");
client = Client.create();
WebResource service=client.resource(getBaseURI());
Log.d("Service", "postRegister2");
Form form = new Form();
form.add("arg", "lol");
int status;
ClientResponse response=null;
try{
response = service.path("test").get(ClientResponse.class);
//post
// response = service.path("post").path("test").post(ClientResponse.class,from);
Log.d("Service", "postRegister3");
status = response.getStatus();
//comment out the following if statement and the code will work perfectly fine, returning the stats
if(status == 200){
return response.getEntity(String.class);
}
return String.valueOf(response.getStatus());
}
catch(ClientHandlerException e){
Log.d("Exception1",e.getMessage()+ " ");
}
catch(UniformInterfaceException e){
Log.d("Exception2",e.getMessage()+ " ");
}
catch(Exception e){
Log.d("Exception3",e.getMessage()+ " ");
}
return "exception";
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
Log.d("doInback", params[0]);
return postTest(params[0]);
}
上面的代码是该类的一部分:
public class Service extends AsyncTask<String, Void, String>{
并被称为:
try {
alert(new Service().execute("lol").get(),view);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
警报方法只显示警告。