0
public class get extends AsyncTask<String,Void,Void>
{

    @Override
    protected Void doInBackground(String... params) {
        // TODO Auto-generated method stub



        try {
            URL url  = new URL("http://c69282.r82.cf3.rackcdn.com/IMG_0755-Edit-4.jpg") ;
            URLConnection connect = url.openConnection();
            InputStream in = new BufferedInputStream(connect.getInputStream());
            Bitmap img = BitmapFactory.decodeStream(in);
            image.setImageBitmap(img);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        return null;
    }


}

这是我的AsyncTask,当我尝试在主线程中运行它时,应用程序崩溃了。

如果我键入它就可以正常工作

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build();
        StrictMode.setThreadPolicy(policy);

但是,创建的全部目的AsyncTask是摆脱使用该代码的需要。

更新:我在执行后放置了 image.setImageBitmap(img) 并且它有效。多谢你们!

4

3 回答 3

3

您无法从doInbackground(). doInbackground在后台线程上调用。ui 应该在 ui 线程上更新。onPostExecute在 ui 线程上调用。计算结果doInbackground是 的参数onPostExecute。所以返回结果doInbackground并更新 ui onPostExecute

http://developer.android.com/reference/android/os/AsyncTask.html

上述链接中的 4 个步骤部分下的检查主题。

     image.setImageBitmap(img);

您应该更新 uionPostExecute或使用runOnUiThread.

但我建议你更新 ui 中的onPostExecute.

     runOnUiThread(new Runnable() //run on ui thread
     {
          public void run() 
          { 
             // update ui       
          }
     });
于 2013-06-27T05:27:45.260 回答
1

我认为您正在该doInBackground()方法中进行 UI 操作。

image.setImageBitmap(img);

您应该在onPostExecute()方法中执行此操作。

您应该只在方法内部执行非 UI 操作doInBackground()

于 2013-06-27T05:27:48.357 回答
0

您无法在 中更新您的 UI doInBackground(),您只需要在 中更新您的 UI onPostExecute()。所以使用下面的代码来更新图像。

public class get extends AsyncTask<String,Void,Void>
{
Bitmap img;
    @Override
    protected Void doInBackground(String... params) {
        // TODO Auto-generated method stub


        try {
            URL url  = new URL("http://c69282.r82.cf3.rackcdn.com/IMG_0755-Edit-4.jpg") ;
            URLConnection connect = url.openConnection();
            InputStream in = new BufferedInputStream(connect.getInputStream());
            img = BitmapFactory.decodeStream(in);

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        return null;
    }

    @Override
    protected void onPostExecute(Bitmap result) 
    {
          image.setImageBitmap(img);
    }


}

同样在这里,您提到了有关 variable 的任何内容image。您应该在 Imageview 中充气onPostExecute(),然后添加用于设置图像位图的行。

于 2013-06-27T05:43:59.873 回答