2015-04-06 163 views
-1

后,我决定实施Universal Image Loader,因为我已经实施了转换URLDrawable的方法,但因为我不知道有多少图像将返回我SQLite查询我决定实施Image Loader。 .. 事情是我卡在这一刻,因为我以为我做了什么GitHub说,但在我加载Image它保持白色,从不加载。实施毕加索不加载图像

在我Adapter class我已经改变了drawable的路线为:

Picasso.with(context) 
      .load(Uri.parse(String.valueOf(item.icon))) 
      .resize(180, 180) 
      .placeholder(R.drawable.ic_launcher).into(viewHolder.ivIcon); 

它的工作原理,beucase它显示了哟我ic_launcher图标...但永远不会改变的真实图像。

在我的课,我取(在我的OnCreate()),我有这样的数据:

new Thread(new Runnable() { 
       @Override 
       public void run() { 
        try { 
         Thread.sleep(2000); 


        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 

        new MyAsyncTask().execute(); 

        getActivity().runOnUiThread(new Runnable() { 

         @Override 
         public void run() { 
        // progress.dismiss(); 
         } 
        }); 
       } 

      }).start(); 
     } 

然后,我创建了一个内部类,我把数据放到我的ListView ...但它不没有用。我不知道如果我必须删除这些方法,因为我已将其更改为Picasso

private class MyAsyncTask extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected void onPreExecute() { 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 

     Conexion = new MarketSQLite(getActivity(), "market", null, 1); 
     mItems = new ArrayList<ListViewItem>(); 

     db = Conexion.getReadableDatabase(); 

     Cursor c; 

     c = db.rawQuery("Select NOM_OFER,PREU_OFERTA,DATA_F,FOTO,PERCENTDESCOMPTE from T_OFERTA", null); 
     c.moveToFirst(); 
     if (c != null) { 
      do { 
       for (int i = 0; i < c.getColumnCount(); i++) { 
        Title = c.getString((c.getColumnIndex("NOM_OFER"))); 
        Preu = c.getColumnIndex("PREU_OFERTA"); 
        percent = c.getString((c.getColumnIndex("PERCENTDESCOMPTE"))); 
        data_f = c.getString((c.getColumnIndex("DATA_F"))); 
        URLTest = c.getString((c.getColumnIndex("FOTO"))); 
        FOTO = Imagehandler(URLTest); 
        Log.e("", "" + c.getString(i)); 

        // initialize and set the list adapter 


        // Toast.makeText(getActivity(), "Title" + Title + "Preu" + Preu + "Percent" + percent + "Cheese is " + data_f, Toast.LENGTH_LONG).show(); 
       } 
       mItems.add(new ListViewItem(FOTO, Title, Preu.toString(), percent, data_f)); 


      }while (c.moveToNext()); 
     } 
     c.close(); 

return null; 
    } 


    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     myAdapter = new ListViewDemoAdapter(getActivity(), mItems); 
     setListAdapter(myAdapter); 
    } 
} 

ImageHandler是一种方法,我已经创建之前是这样的:

protected Drawable Imagehandler(String url) { 
     try { 
      url=url.replaceAll(" ", "%20"); 
      InputStream is = (InputStream)this.fetch(url); 
      Drawable d = Drawable.createFromStream(is, "src"); 
      return d; 
     } catch (MalformedURLException e) 
     { 
      System.out.println(url); 
      System.out.println("error at URI"+e); 
      return null; 
     } 
     catch (IOException e) 
     { 
      System.out.println("io exception: "+e); 
      System.out.println("Image NOT FOUND"); 
      return null; 
     } 
    } 

    protected Object fetch(String address) throws MalformedURLException,IOException { 
     URL url = new URL(address); 
     Object content = url.getContent(); 
     return content; 
    } 

我不知道为什么,是不是我的ListView的图像加载,如果它显示了所有的休息数据...

回答

2

而是可绘制的,试图让URL字符串在适配器像

改变从

public ListViewItem(Drawable icon, String title, String precio, String descuento, String date) { 
    this.icon = icon; 
    this.title = title; 
    this.precio = precio; 
    this.descuento = descuento; 
    this.date = date; 
} 

public ListViewItem(String icon_url, String title, String precio, String descuento, String date) { 
     this.icon_url = icon_url; 
     this.title = title; 
     this.precio = precio; 
     this.descuento = descuento; 
     this.date = date; 
    } 

,并使用毕加索,你加载你的ImageView这样的 -

Picasso.with(context) 
      .load(icon_url)) 
      .resize(180, 180) 
      .placeholder(R.drawable.ic_launcher).into(viewHolder.ivIcon); 

1)你的ListViewItem类应该是这样的 -

public class ListViewItem { 
    public final String icon;  // the drawable for the ListView item ImageView 
    public final String title;  // the text for the ListView item title 
    public final String precio;  // the price for the ListView item 
    public final String descuento; // the price for the discount for the ListView item 
    public final String date;  //the date for the sale for the ListView item 

    // the text for the ListView item description 

    public ListViewItem(String icon_url, String title, String precio, String descuento, String date) { 
     this.icon = icon_url; 
     this.title = title; 
     this.precio = precio; 
     this.descuento = descuento; 
     this.date = date; 
    } 
} 

2)ListViewDemoAdapterClass

public class ListViewDemoAdapter extends ArrayAdapter<ListViewItem> { 
Context context; 
    public ListViewDemoAdapter(Context context, List<ListViewItem> items) { 
     super(context, R.layout.listview_item, items); 
     this.context = context; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder viewHolder; 

     if(convertView == null) { 
      // inflate the GridView item layout 
      LayoutInflater inflater = LayoutInflater.from(getContext()); 
      convertView = inflater.inflate(R.layout.listview_item, parent, false); 

      // initialize the view holder 
      viewHolder = new ViewHolder(); 
      viewHolder.ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon); 
      viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle); 
      viewHolder.tvPrice = (TextView) convertView.findViewById(R.id.tvPrice); 
      viewHolder.tvDiscount = (TextView) convertView.findViewById(R.id.tvDiscount); 
      viewHolder.tvDate = (TextView) convertView.findViewById(R.id.tvDatas); 
      convertView.setTag(viewHolder); 
     } else { 
      // recycle the already inflated view 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     // update the item view 
     ListViewItem item = getItem(position); 
     Picasso.with(context) 
       .load(item.icon) 
       .resize(180, 180) 
       .placeholder(R.drawable.ic_launcher).into(viewHolder.ivIcon); 
     viewHolder.tvTitle.setText(item.title); 
     viewHolder.tvDiscount.setText(item.descuento); 
     viewHolder.tvPrice.setText(item.precio); 
     viewHolder.tvDate.setText(item.date); 

     return convertView; 
    } 


    private static class ViewHolder { 
     ImageView ivIcon; 
     TextView tvTitle; 
     TextView tvDiscount; 
     TextView tvPrice; 
     TextView tvDate; 
    } 
} 
  • ListFragment代码,只需添加此

    Cursor c; 
    
    c = db.rawQuery("Select 
    NOM_OFER,PREU_OFERTA,DATA_F,FOTO,PERCENTDESCOMPTE from T_OFERTA", null); 
    c.moveToFirst(); 
    if (c != null) { 
    do { 
    for (int i = 0; i < c.getColumnCount(); i++) { 
    Title = c.getString((c.getColumnIndex("NOM_OFER"))); 
    Preu = c.getColumnIndex("PREU_OFERTA"); 
    percent = c.getString((c.getColumnIndex("PERCENTDESCOMPTE"))); 
    data_f = c.getString((c.getColumnIndex("DATA_F"))); 
    URLTest = c.getString((c.getColumnIndex("FOTO"))); 
    
  • 希望这会有所帮助:)

    +0

    像魅力一样工作,谢谢;) – 2015-04-06 14:31:23

    2

    你只需要添加你的毕加索代码段为您ImageHandler方法下面并没有什么else-

    Picasso.with(context) 
          .load(url)) 
          .resize(180, 180) 
          .placeholder(R.drawable.ic_launcher).into(your_imageview); 
    

    您不需要下载图像或制作位图或将其转换为可绘制的图形以便从url加载。希望这可以帮助你。

    +0

    我的网址不在同一个类中,我的意思是我在查询我的SQLite – 2015-04-06 11:53:36

    +1

    时得到的网址,这应该不是问题。你从任何地方检索网址,然后加载网址。只有一件事是明确的URI和URL不是一回事。 – 2015-04-06 12:18:21

    +0

    但是我必须定义网址......并且在我的其他班级 – 2015-04-06 12:32:19