在尝试调用Web服务并获取相应的json对象时,我遇到了致命的异常。我完全不知道在哪里查看以及要纠正哪些错误。
编辑:
private class CallServiceTask extends AsyncTask<Object, Void, JSONObject>
{
protected JSONObject doInBackground(Object... params)
{
HttpGet req = (HttpGet) params[0];
String url = (String) params[1];
return executeRequest(req, url);
}
}
这是在doInBackground中调用的executeRequest方法:
private JSONObject executeRequest(HttpGet request, String url)
{
HttpClient client = new DefaultHttpClient();
JSONObject jsonObj = null;
client = getNewHttpClient();
HttpResponse httpResponse;
try {
httpResponse = client.execute(request);
HttpEntity entity = httpResponse.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
String response = convertStreamToString(instream);
try {
jsonObj = new JSONObject(response);
} catch (JSONException e1) {
e1.printStackTrace();
}
// Closing the input stream will trigger connection release
instream.close();
}
} catch (ClientProtocolException e) {
client.getConnectionManager().shutdown();
e.printStackTrace();
} catch (IOException e) {
client.getConnectionManager().shutdown();
e.printStackTrace();
}
return jsonObj;
}
答案 0 :(得分:3)
只需查看您的LogCat堆栈跟踪(在本例中),它就会告诉您所有需要知道的异常是什么以及导致它的原因:
线程退出未捕获的异常
告诉您已抛出您的代码无法处理的异常
执行doInBackground()
时发生错误
这告诉您Async任务中的doInBackground()函数抛出了这个未处理的异常
引起:java.lang.ClassCastException ... HttpPost ...(RestClient.java:275)
这告诉您,您遇到了ClassCastException,这是由于该源文件中第275行的HttpPost调用所致。
编辑:
应该更仔细地读取堆栈跟踪...正如HandlerExploit发布的那样,HttpPost正在抛出该错误,你期待HttpGet ......但是下面的调试方法仍然存在:
如果使用e.getMessage()添加额外的catch(ClassCastException e),您很可能会看到更详细地描述问题的有用错误消息。
在这种情况下,我发现一个意外的异常被抛出,我倾向于添加一个临时的'全部捕获'(catch(Exception e){e.printStackTrace()})并在e上添加一个断点。 printStackTrace()所以我可以看到关于异常的所有细节...可能不是最有效的方法,但它是你在黑暗中的开始!
答案 1 :(得分:0)
我最好的猜测是:
HttpGet req = (HttpGet) params[0];
返回HttpPost
而不是HttpGet
。
请发帖到new CallServiceTask().execute();