Вытягивается из URL с сотами - PullRequest
1 голос
/ 01 июля 2011

с самого начала я использовал этот метод:

 public Drawable createPortrait(String url){
    try {
        InputStream is = (InputStream)new URL(url).getContent();
        Drawable d = Drawable.createFromStream(is, "Image");
        return d;
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    }

}

но соты не позволяют мне делать это больше, что я вижу в своем журнале: android.os.networkonmainthreadexception.дело в том, что мой URL уже взят из данных json:

 private class GrabURL extends AsyncTask<String, Void, Void> {
    private final HttpClient Client = new DefaultHttpClient();
    private String Content;
    private String Error = null;
    private ProgressDialog Dialog = new ProgressDialog(Main.this);

    protected void onPreExecute() {
        Dialog.setMessage("Downloading source..");
        Dialog.show();
    }

    protected Void doInBackground(String... urls) {
        try {
            HttpGet httpget = new HttpGet(urls[0]);
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            Content = Client.execute(httpget, responseHandler);
        } catch (ClientProtocolException e) {
            Error = e.getMessage();
            cancel(true);
        } catch (IOException e) {
            Error = e.getMessage();
            cancel(true);
        }

        return null;
    }
    protected void onPostExecute(Void unused) {
        Dialog.dismiss();
        if (Error != null) {
            Toast.makeText(Main.this, Error, Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(Main.this, "Source: " + Content, Toast.LENGTH_LONG).show();
        }
        Object o = new Gson().fromJson(Content, Info.class);
        Info i = (Info)o;
        String d = i.getData().get(0).getLg_portrait();
        portrait.setBackgroundDrawable(createPortrait(d));
    }

}

, а портрет - это ImageView.я не знаю что делать.

1 Ответ

0 голосов
/ 01 июля 2011

Вам нужно также загрузить изображение в асинхронное задание. Honeycomb просто не позволяет выполнять длительную HTTP-операцию, блокирующую поток пользовательского интерфейса (чтение из потока вызывает HTTP-вызов и ожидает загрузки изображения). Вы должны немедленно вернуть заполнитель, запустить AsyncTask и заменить изображение после того, как оно уже загружено.

Подсказка "post execute" запускается в потоке пользовательского интерфейса ....

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