Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 致命异常:异步任务#2_Android_Android Asynctask - Fatal编程技术网

Android 致命异常:异步任务#2

Android 致命异常:异步任务#2,android,android-asynctask,Android,Android Asynctask,我有3个按钮和一个图库。在我的图库中,我有3个ImageAdapters,一个用于单击每个按钮,我设置了一个缩略图URL,该URL必须获取并加载到这些ImageAdapters,我使用AsyncTask进行此操作 代码: 应用程序启动正常,但有时会抛出以下错误: 01-21 15:16:23.750:E/AndroidRuntime(8292):致命异常:AsyncTask#2 01-21 15:16:23.750:E/AndroidRuntime(8292):位于java.util.concu

我有3个按钮和一个图库。在我的图库中,我有3个ImageAdapters,一个用于单击每个按钮,我设置了一个缩略图URL,该URL必须获取并加载到这些ImageAdapters,我使用AsyncTask进行此操作

代码:

应用程序启动正常,但有时会抛出以下错误:

01-21 15:16:23.750:E/AndroidRuntime(8292):致命异常:AsyncTask#2 01-21 15:16:23.750:E/AndroidRuntime(8292):位于java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 01-21 15:16:23.750:E/AndroidRuntime(8292):在java.util.concurrent.FutureTask.setException(FutureTask.java:124) 01-21 15:16:23.750:E/AndroidRuntime(8292):在java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 01-21 15:16:23.750:E/AndroidRuntime(8292):在java.util.concurrent.FutureTask.run(FutureTask.java:137) 01-21 15:16:23.750:E/AndroidRuntime(8292):位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)


出现这种情况的可能原因是什么?我如何解决它?

您是否有可能捕获到一个异常,但在捕获{}中又捕获到另一个异常?因为它位于不同的(非UI)线程上,所以不要尝试使用Toast来通知自己错误。

您是否有可能捕获到一个异常,但在捕获{}中又捕获到另一个异常?因为它位于不同的(非UI)线程上,所以不要尝试使用Toast来通知自己错误。

您可以尝试仅在更新的适配器上调用notifyDataSetChanged(),看看这是否是问题所在。。您的意思是说我需要在
onPostExecute
方法中调用
notifyDataSetChanged()
,我的意思是向onPostExecute()方法传递一个整数或其他信息,以了解哪个适配器已更新,并仅更新该特定适配器。您可以尝试仅在更新的适配器上调用notifyDataSetChanged(),看看这是否是问题。您的意思是说我需要调用
notifyDataSetChanged()
onPostExecute
方法中?不,我的意思是向onPostExecute()方法传递一个整数或其他信息,以了解更新了哪个适配器,并仅更新该特定适配器
 class AddImageTask extends AsyncTask<Void, Void, Void> {
    @Override
    protected Void doInBackground(Void... unused) {
         try {
         for (String url : PhotoURLS) {
         String filename = url.substring(url.lastIndexOf("/") +
         1,url.length());
         filename = "" + filename;
         String thumburl = url.substring(0, url.lastIndexOf("/") + 1);
         imageAdapter.addItem(LoadThumbnailFromURL(thumburl+ filename));
         publishProgress();
         }

         for (String url : AudioThumbURLS) {
         String filename = url.substring(url.lastIndexOf("/") +
         1,url.length());
         filename = "" + filename;
         String thumburl = url.substring(0, url.lastIndexOf("/") + 1);
         imageAdapter1.addItem(LoadThumbnailFromURL(thumburl+ filename));
         publishProgress();
         }
         for (String url : VideoThumbURLS) {
         String filename = url.substring(url.lastIndexOf("/") +
         1,url.length());
         filename = "" + filename;
         String thumburl = url.substring(0, url.lastIndexOf("/") + 1);
         imageAdapter2.addItem(LoadThumbnailFromURL(thumburl+ filename));
         publishProgress();
         }

         } catch (Exception ae) {
         ae.printStackTrace();
         Toast.makeText(getApplicationContext(),"Error found in the application",
         Toast.LENGTH_LONG).show();
         }
        return (null);
    }

    @Override
    protected void onProgressUpdate(Void... unused) {
        imageAdapter.notifyDataSetChanged();
        imageAdapter1.notifyDataSetChanged();
        imageAdapter2.notifyDataSetChanged();
    }

    @Override
    protected void onPostExecute(Void unused) {
    }
}
   private Drawable LoadThumbnailFromURL(String url) {
    try {
        URLConnection connection = new URL(url).openConnection();
        String contentType = connection.getHeaderField("Content-Type");
        boolean isImage = contentType.startsWith("");
        if (isImage) {
            HttpGet httpRequest = new HttpGet(url);
            HttpClient httpclient = new DefaultHttpClient();
            HttpResponse response = (HttpResponse) httpclient
                    .execute(httpRequest);
            HttpEntity entity = response.getEntity();
            BufferedHttpEntity bufferedHttpEntity = new BufferedHttpEntity(
                    entity);
            InputStream is = bufferedHttpEntity.getContent();
            Drawable d = Drawable.createFromStream(is, "src name");
            return d;
        } else {
            Bitmap b = BitmapFactory.decodeResource(getResources(),
                    R.drawable.icon);
            Drawable d = new BitmapDrawable(b);
            return d;
        }
    } catch (Exception e) {
        Toast.makeText(getApplicationContext(), "error", Toast.LENGTH_LONG)
                .show();
        Log.e(e.getClass().getName(), e.getMessage(), e);

    }
    return null;
}