java - 显然缺少异常

标签 java android android-asynctask

在我的 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());

                            }

               }
        }

enter image description here

最佳答案

也许您可以说出正在抛出的实际异常? 它可能是一个 RuntimeException,因此未被检查。

有关检查/非检查异常的更多信息,请参阅:Oracle Docs - Exceptions

关于java - 显然缺少异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22804410/

相关文章:

java - Spring 可以有多个 bean 互连版本吗?

android - 如何在 TextView for Android 中使用新的卢比符号?

android - 是否有用于多平台预资助礼品代码生成的 API/平台

android - 在 Android 中从 AsyncTask 检索返回的字符串

java - javafx 中是否有任意形状的 "fill"函数?

java - 线程中出现异常 "main"java.lang.ArrayIndexOutOfBoundsException

java - Java 代码中的 "loop:"。这是什么,为什么要编译?

java - 在 Firebase GenericTypeIndicator 中使用泛型类型时为 "Unknown type encountered"

android-asynctask - asynctask #2 执行 doinbackground() 时发生错误

Android AsyncTask 和 Thread 不同的行为