【发布时间】:2016-03-20 14:02:30
【问题描述】:
我正在创建一个 android 应用程序,它接受用户输入,尝试使用指定的输入连接到 API url 并检索数据并显示它。现在我已经能够完成上述所有操作,但是如果用户输入了某些内容但它不存在,我的应用程序可能会因为 NPE(空指针异常)而崩溃。
我使用的 API 向我显示了可能发生的响应错误列表,但我不确定我应该如何处理或实现将这些响应错误考虑在内的功能。
目前我的扩展 AsyncTask 类具有以下参数:String、Void、JSONObject,以下代码是我的 doInBackground 方法中的内容.
URL url = new URL(params[0]);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
int statusCode = urlConnection.getResponseCode();
switch (statusCode) {
case 400:
return "Error 400 - Bad request.";
case 401:
return "Error 401 - Unauthorized request.";
}
我无法返回字符串,因为我的 AsyncTask 参数返回 JSONObject。我可以更改它,让它返回一个字符串,但我认为这不是处理响应错误的正确逻辑方式。
现在,如果 API 响应代码是 404(未找到数据),我不希望应用程序崩溃,因为它无法返回 JSONObject,而是希望它继续到下一个片段并显示最少的信息。
那么当我的方法返回 JSONObject 时,我该如何处理响应错误?
【问题讨论】:
-
创建一个可以作为回调的接口。创建 AsyncTask 时,将回调的新实例作为参数之一传递。在 AsyncTask 中保存对传递的回调的引用,并通过 onPostExecute 为 AsyncTask 处理响应。将响应码(状态码)传递给 onPostExecute() 并通过你创建的接口传递你想要的相关信息。如果需要可以提供代码示例
标签: java android android-asynctask