从Android调用Jersey服务,未知异常

时间:2014-11-15 16:24:02

标签: java android android-asynctask jersey jersey-client

我正在尝试使用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();
    }

警报方法只显示警告。

1 个答案:

答案 0 :(得分:0)

使用库来实现Async Http client

我可以找到我遵循的教程here