Android | AsyncTask - код возвращает неверный тип - PullRequest
0 голосов
/ 03 января 2012

Я слишком долго ломал голову над этим - любое понимание было бы очень полезно.

Я впервые играю с AsyncTask, и я немного запутался в том, что делаюздесь неправильно - Eclipse заявляет: «Этот метод должен возвращать результат типа объекта» Однако;Я не вижу, как это не так - если я не пропускаю что-то здесь.

Я пытаюсь загрузить изображение и отобразить его на imageView1 (Кроме того, если вам удастся сэкономить время и скажите мне, правильно ли я выполняю свой код postExecute или нет, это было бы здорово:))

    private class DownloadImageTask extends AsyncTask<String, Void, Object> {
    protected Object doInBackground(String... urls) {
        try {
            URL url = new URL(urls[0]);
            Object content = url.getContent();
            return content; 
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    protected void onPostExecute(Object result) {
        InputStream is = (InputStream) result;
        Drawable d = Drawable.createFromStream(is, "src");
        ImageView imgView = (ImageView)findViewById(R.id.imageView1);
        imgView.setImageDrawable(d);
    }
}

Ответы [ 4 ]

2 голосов
/ 03 января 2012

Вы ничего не возвращали, когда вы ловили исключение, поэтому он показывает сообщение «Этот метод должен возвращать результат типа объекта». Пожалуйста, возвращает любой объект или ноль при перехвате исключения.

Более того, если вы получаете ничью, то ваш метод postexecute правильный.

Ваш код должен выглядеть следующим образом:

private class DownloadImageTask extends AsyncTask<String, Void, Object> {
            protected Object doInBackground(String... urls) {
                try {
                    URL url = new URL(urls[0]);
                    Object content = url.getContent();
                    return content; 
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                    return null;//added 
                } catch (IOException e) {
                    e.printStackTrace();
                    return null;//added
                }
            }
            protected void onPostExecute(Object result) {
                InputStream is = (InputStream) result;
                Drawable d = Drawable.createFromStream(is, "src");
               ImageView imgView = (ImageView)findViewById(R.id.imageViewMaricoLogo);
               imgView.setImageDrawable(d);
            }
        }
1 голос
/ 03 января 2012

Ваш doInBackground () ничего не возвращает, поэтому вы получаете эту ошибку.Это случилось со мной ранее, установите его для возврата объекта, который вы будете использовать в onPostExecute или null, и он должен работать.Удачи

1 голос
/ 03 января 2012

Полагаю, вы хотите передать только строку (URL) в AsynTask, поэтому ваш код должен быть довольно простым, как этот

private class DownloadImageTask extends AsyncTask<String, Void, Void>
    {

        @Override
        protected Void doInBackground(String... urls) {
             try {
                    URL url = new URL(urls[0]);
                    Object content = url.getContent();
                    return content; 
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            InputStream is = (InputStream) result;
            Drawable d = Drawable.createFromStream(is, "src");
            ImageView imgView = (ImageView)findViewById(R.id.imageView1);
            imgView.setImageDrawable(d);
        }
    }
0 голосов
/ 03 января 2012

Ваш код должен быть таким ..

private class DownloadImageTask extends AsyncTask<String, Void, String> {//Notice i changed the Void, and String around in the parameters
protected Object doInBackground(String... urls) {
    try {
        URL url = new URL(urls[0]);
        Object content = url.getContent();
        return content; 
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
protected void onPostExecute(String result) {
    InputStream is = (InputStream) result;
    Drawable d = Drawable.createFromStream(is, "src");
    ImageView imgView = (ImageView)findViewById(R.id.imageView1);
    imgView.setImageDrawable(d);
}

}

РЕДАКТИРОВАТЬ:

Я изменил объект на строку.Это тот объект, который вы пытаетесь вернуть?

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