Java get请求在android设备上不起作用,但它';他在用我的电脑

Java get请求在android设备上不起作用,但它';他在用我的电脑,java,android,okhttp,Java,Android,Okhttp,我已经编写了这个简单的get请求 OkHttpClient httpClient = new OkHttpClient(); StringBuilder url = new StringBuilder(serverURL); String result = "init"; if(params!=null && params.size()!=0){ url = url.append("?"+prepareParam(params)); } Request request

我已经编写了这个简单的get请求

OkHttpClient httpClient = new OkHttpClient();
StringBuilder url = new StringBuilder(serverURL);

String result = "init";
if(params!=null && params.size()!=0){
    url = url.append("?"+prepareParam(params));
}
Request request = new Request.Builder().url(url.toString()).build();
Response response = null;
try {
response = httpClient.newCall(request).execute();
result = response.body().string();
} catch (IOException e) {
    e.printStackTrace();
}
catch (Exception e){
    e.printStackTrace();
}finally {
    response.close();
}
当我在我的pc上测试它时,它工作得很好,但是当我在我的手机上测试它时,它给了我以下的例外

java.lang.NullPointerException: Attempt to invoke virtual method 'void okhttp3.Response.close()' on a null object reference

在finally块中。

尝试一下,而不是使用这么多的Try-catch

  OkHttpClient client = new OkHttpClient();
  String doGetRequest(String url) throws IOException {
    Request request = new Request.Builder()
        .url(url)
        .build();
    Response response = client.newCall(request).execute();
    return response.body().string();
  }
然后只要调用上面的方法并在需要时传递url即可

 String response =doGetRequest(yourUrl);

或者简单的
if(response!=null){response.close();}
这也是有效的。谢谢,但我想知道为什么我的手机上的响应为null,而不是我的pcresponse=httpClient.newCall(request.execute();由于任何网络错误或权限,该行响应可能不会实例化,因此最终阻塞时会出现空指针错误。在最终阻塞之前,有两个catch块。调试这两行代码时,您可能会发现错误。这给了我
android.os.NetworkOnMainThreadException
异常
 String response =doGetRequest(yourUrl);