2012-11-26 51 views
0

我想显示图像从URL下载并在列表视图中显示它。 这是我的源代码。输出有一个空白点..这就是全部......无法在列表视图上显示图像

这是我从中调用的Java。

ABC s = ABC.getSingletonObject(); 
String[][] full_data = s.getString(); 

private ListView listView1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity2); 

    //second one is always the type of data... 
    Weather weather_data[] = new Weather[] 
    {  // full_data[1][0] contains the URL String.. 
     new Weather(full_data[1][0],full_data[1][2],full_data[1][3]), 
     new Weather(full_data[2][0],full_data[2][2],full_data[2][3]), 
    }; 

    WeatherAdapter adapter = new WeatherAdapter(this,R.layout.listview_header_row,          weather_data); 
    listView1 = (ListView)findViewById(R.id.listView1); 
    View header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null); 
    listView1.addHeaderView(header); 
    listView1.setAdapter(adapter); 
} 

这是我的适配器..

public class WeatherAdapter extends ArrayAdapter<Weather> { 
     Context context; 
     int layoutResourceId; 
     Weather data[] = null; 

    public WeatherAdapter(Context context, int layoutResourceId, Weather[] data) { 
     super(context, layoutResourceId, data); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
     this.data = data; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    WeatherHolder holder = null; 

    if(row == null) 
    { 
     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new WeatherHolder(); 
     holder.imgIcon = (ImageView)row.findViewById(R.id.imageView1); 
     holder.txtTitle = (TextView)row.findViewById(R.id.txt1); 
     holder.txtRating=(TextView)row.findViewById(R.id.rtxt1); 

     row.setTag(holder); 
    } 
    else 
    { 
     holder = (WeatherHolder)row.getTag(); 
    } 

    Weather weather = data[position]; 
    holder.txtTitle.setText(weather.wtitle); 
    holder.imgIcon.setImageDrawable(weather.wicon); 
    holder.txtRating.setText(weather.wrating); 
    //holder.imgIcon.setImageResource(R.drawable.ic_launcher); 
    //holder.imgIcon.setImageBitmap(weather.wicon); 
    return row; 
    } 

    static class WeatherHolder 
    { 
    //Bitmap imgIcon; 
    ImageView imgIcon; 
    TextView txtTitle; 
    TextView txtRating; 
    } 
} 

这是其他的java文件

public class Weather { 

    public Drawable publicdraw; 
    public Drawable wicon; 
    public String wtitle; 
    public String wrating; 
    public Weather(){ 
    super(); 
    } 

    public Weather(String icon, String title,String rating) { 
     super(); 
     LoadImageFromWebOperations(icon); 
     this.wtitle = title; 
     this.wrating=rating; 
     this.wicon=publicdraw; 
    } 

    public void LoadImageFromWebOperations(String url_string) { 
     try { 
      grabImage(url_string); 

     } catch (Exception e) { 

     } 
    } 

    public void grabImage(String url) { 
     new GrabURL1().execute(url); 
    } 


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

    public Drawable d; 
    InputStream is; 

    protected Void doInBackground(String... urls) { 

      try { 
       is = (InputStream) new URL(urls[0]).getContent(); 
       d = Drawable.createFromStream(is, "src name"); 
      } catch (MalformedURLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      return null; 

    } 

     protected void onPostExecute(Void unused) { 
      publicdraw=d; 

     } 
    } 
} 
+0

为什么不在onPostExecute之后将下载的图像设置为imageview? – e7fendy

+0

仍然没有工作!实际上尝试了一切......现在我只是在这里粘贴了一个版本...... –

+0

即使我想这样做......我会失去以前的瞬间权利? ...因为我正在使用“this.wicon”...在PostExecte中,我将如何获得之前的上下文... –

回答

0

我建议你去通过这个tutorial。直截了当,不难,非常有效。我用它来加载列表视图中的图像。
如果您遇到困难,请询问。

+0

我经历了几乎所有可能的代码。 但我有同样的问题... –

+0

@JS_VIPER,你可以发布图像的一些链接,只是为了检查。 –

0

在将图像分配到列表之前,请尝试添加以下条件。

if (holder.imgIcon != null && position < weather_data.size()) { 
     Weather weather = data[position]; 
     holder.imgIcon.setImageDrawable(weather.wicon); 
} 

我有同样的问题,这个技巧对我来说就像一个魅力工作。

谢谢。