Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 如何在异步任务中实现此映像视图?_Android_Asynchronous_Imageview - Fatal编程技术网

Android 如何在异步任务中实现此映像视图?

Android 如何在异步任务中实现此映像视图?,android,asynchronous,imageview,Android,Asynchronous,Imageview,我将一个url传递给一个活动,我试图从url全屏显示图像,但是它引发了一个主网络线程异常 从我所能找到的情况来看,我相信我必须将该方法放在异步任务中,但是我似乎根本无法理解它。那么,我如何将此方法放入异步任务中呢 FullScreenImageView.java public class FullscreenImageView extends Activity { @Override protected void onCreate(Bundle savedInstanceState) {

我将一个url传递给一个活动,我试图从url全屏显示图像,但是它引发了一个主网络线程异常

从我所能找到的情况来看,我相信我必须将该方法放在异步任务中,但是我似乎根本无法理解它。那么,我如何将此方法放入异步任务中呢

FullScreenImageView.java

public class FullscreenImageView extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    String url = getIntent().getStringExtra("SelectedImageURL");



    try {
        ImageView i = (ImageView)findViewById(R.id.imgView);
        Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(url).getContent());
        i.setImageBitmap(bitmap);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
}

将网络任务放入AsyncTask的
doInBackground()
方法中,如下所示:

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

try {
        //ImageView i = (ImageView)findViewById(R.id.imgView);Put this line in onPreExecute() method
        Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(url).getContent());
       // i.setImageBitmap(bitmap);//and this one on postExecute() method
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

应该是这样的。 在
doInBackground
中获得图像,在
onPostExecute
中设置图像

private class DownloadFilesTask extends AsyncTask<String, Void, Bitmap>  {
     @Override
     protected Bitmap doInBackground(String... urls) {
          Bitmap bitmap = null; 
          try {
              bitmap = BitmapFactory.decodeStream((InputStream)new URL(urls[0]).getContent());
          } catch (MalformedURLException e) {
               e.printStackTrace();
          } catch (IOException e) {
             e.printStackTrace();
          }
          return bitmap;
     }
     @Override
     protected void onPostExecute(Bitmap bitmap) {
        ImageView i = (ImageView)findViewById(R.id.imgView);
        i.setImageBitmap(bitmap);
     }
 }
使用findViewById()初始化
yourImageView
后使用


将代码> BitmapFactory。解码流<代码>进入doIn后台返回位图,在OnPASTROST中,将此位图设置为“塞尔文的可能副本”,请查看并考虑投票,如果您喜欢:-)塞尔文抱歉,但无法理解。reason@SpiderMan这就是生活,事情有升有降。这一切都在oncreate方法中吗?不幸的是,当我单击时,在空对象引用上显示“尝试调用虚拟方法”void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)”,当你单击什么时?从该错误中,我可以假设你的活动中缺少了什么,导致ImageView为空。我在您的代码中看不到setContentView,所以可能这就是缺少的内容。
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    String url = getIntent().getStringExtra("SelectedImageURL");
    new DownloadFilesTask ().execute(url); 
}
Picasso.with(context).load(url).into(yourImageView)