ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: AsyncTask # 2 - PullRequest
0 голосов
/ 21 января 2012

У меня есть 3 кнопки и галерея. В моей галерее у меня есть 3 адаптера изображения для каждого нажатия кнопки, и я задаю URL-адрес миниатюрного изображения, который должен быть выбран и загружен в эти адаптеры изображений, и я использую AsyncTask. для этого.

Код:

 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) {
    }
}

И мой метод LoadThumbnailFromURL:

   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;
}

Приложение запускается нормально, но через некоторое время выдает ошибку как:

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)

Что может быть причиной этого и как мне ее решить?

1 Ответ

3 голосов
/ 10 марта 2012

Есть ли шанс, что вы поймали исключение, но получили другое исключение внутри своего улова {}?Поскольку он находится в другом потоке (не в пользовательском интерфейсе), не пытайтесь использовать Toast, чтобы уведомить себя об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...