在我的 Android 应用程序中,我有一个 AsyncTask,它从我的服务器下载照片。如果出现异常(主要是连接超时),我会向用户显示一条消息。我的问题是我的代码在大多数情况下都可以工作(这意味着有时当我中断 WiFi 连接时,我的 logcat 中会出现异常,但该消息不会出现,因此我结束了它认为可能存在我无法处理的异常),但我无法弄清楚确切的原因。我将发布在 AsyncTask 中运行的代码以及完成基本工作的函数。希望你能发现我遗漏的东西
@Override
protected String doInBackground(String... args) {
JSONParser jParser = new JSONParser();
JSONObject jsonObj = jParser.getJSONFromUrl(url);
Log.d("check1",url);
try {
list.addAll(processJsonData(jsonObj));
} catch (JSONException e) {
e.printStackTrace();
onDownloadFailed(this);
return "failed";
} catch (SocketException e) {
Log.e("Exception", e.getLocalizedMessage());
onDownloadFailed(this);
return "failed";
} catch (IOException e) {
Log.e("Exception", e.getLocalizedMessage());
onDownloadFailed(this);
return "failed";
}finally {
jsonObj=null;
}
return "done";
}
<小时/>
进程JsonData实际上更大,这是下载照片的部分,另一部分是将字符串映射到一个大的Json文件
private ArrayList<Monument> processJsonData(JSONObject jsonObj) throws IOException, SocketException, JSONException{
if(attachments!=null){
int lengthSize;
if(attachments.length()<3)
lengthSize=attachments.length();
else
lengthSize=3;
for(int j=0;j<lengthSize;++j){
JSONObject atta = attachments.getJSONObject(j);
JSONObject images = atta.optJSONObject(TAG_IMAGES);
if(images!=null){
JSONObject medium = images.getJSONObject(TAG_MEDIUM);
String url_image = medium.getString(TAG_URL_IMAGE);
String id = atta.getString("id");
String filename =title.replace(" ","")+id+".nomedia";
File destination = new File(MyApplication.getPhotoStorage() ,filename);
URL url = new URL (url_image);
InputStream is = url.openStream();
OutputStream os = new FileOutputStream(destination);
byte[] b = new byte[2048];
int length;
while ((length = is.read(b)) != -1) {
os.write(b, 0, length);
}
is.close();
os.close();
localPhotosUrl.add(destination.getAbsolutePath());
}
}
}
最佳答案
也许您可以说出正在抛出的实际异常? 它可能是一个 RuntimeException,因此未被检查。
有关检查/非检查异常的更多信息,请参阅:Oracle Docs - Exceptions
关于java - 显然缺少异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22804410/