2013-04-09 48 views
0

我试图让应用程序显示来自URL的图像,我相当确定问题是与AsyncTask但我已经返回在过去一周内多次对此代码进行编码,但仍然无法确定我要出错的地方。Android - 从网址抓取图像并使用AsyncTask在ImageView中显示它

Internet权限设置,我没有得到的logcat

ImageView eventImage2; 
eventImage2 = (ImageView) findViewById(R.id.eventImage2); 

new imageupdate().execute(); 

public class imageupdate extends AsyncTask<Bitmap, Void, Bitmap> { 

    @Override 
    protected Bitmap doInBackground(Bitmap... url) { 


     URL url1; 

     try { 


      url1 = new URL("http://masterzangetsu.eu/Apps/NowIGetYou/banner.png"); 
      HttpURLConnection connection = (HttpURLConnection) url1.openConnection(); 

      InputStream is = connection.getInputStream(); 
      Bitmap img = BitmapFactory.decodeStream(is); 


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


     return img; 

    } 

    protected void onPreExecute(String result) { 


    } 

    protected void onPostExecute(Bitmap result) { 
     super.onPostExecute(result); 

     eventImage2.setImageBitmap(result); 

    } 

} 

至于我可以告诉与

img = BitmapFactory.decodeStream(is); 

心不是定义的IMG变量被链接到返回

变量
return img; 

这两个变量的结果和img都返回为空

+2

您将'result'设置为'null',然后使用'img = result' ...这意味着'img'为'null'。你是否想要转换'img'和'result'? – codeMagic 2013-04-09 12:58:54

+0

您是否尝试调试此代码,查看它出错的位置? – Egor 2013-04-09 12:59:08

+0

@codeMagic是...这是问题.. – Pragnani 2013-04-09 12:59:42

回答

1

更改此

Bitmap result = null; 

     InputStream is = connection.getInputStream(); 
     Bitmap img = BitmapFactory.decodeStream(is); 


     img = result; 

Bitmap img = null; 

     InputStream is = connection.getInputStream(); 
     Bitmap img = BitmapFactory.decodeStream(is); 


     result = img; 

doInBackground()return result。你有他们切换,所以'img'将是null无论发生什么事情。

此外,您不能在doInBackground()中使用Toast,因为此方法未在UI线程上运行。您需要制作一个Log或将Toast放入onPostExecute()onProgressUpdate()。这些是我看到的。如果你仍然有问题,那么你需要更明确一些具体的内容。您需要调试和使用断点,看看是不是返回什么,应该是和找出多一点的问题是什么

AsyncTask - 任何UI更新必须的AsyncTask以外的其他方法来完成doInBackground()或者您可以将值传递回Activity以在那里更新UI

+0

编辑'Toast'并且试图缩小问题的范围 – 2013-04-09 13:28:00

+0

@瑞安你还有这个问题吗? – codeMagic 2013-04-10 23:53:09

相关问题