如何使用毕加索图书馆

Posted

技术标签:

【中文标题】如何使用毕加索图书馆【英文标题】:How to use Picasso Library 【发布时间】:2014-10-10 11:01:57 【问题描述】:

如何使用picasso library 加载图像? 我已经尝试过了,但它在我的屏幕上显示force close。我刚刚添加了这个:

ImageView a = (ImageView)findViewById(R.id.ivImage);
Picasso.with(Home.this).load(TAG_IMAGE).into(a);  

在我的onPostExecute() 上,我正在从服务器加载我的图像。

【问题讨论】:

您的 ImageView 是否位于 activity_home.xml 上? 【参考方案1】:

为此,您必须编写自定义适配器。

请参阅this link 以了解如何在您的自定义适配器中使用毕加索。

要了解 customAdapter(),请参考 this link

【讨论】:

在此处使用您的 Picasso.with()... 语句。 参考更新答案中的链接。检查页面上的 CustomListAdapter.java。 如果您没有得到BaseAdapter的逻辑,请询问。 是的,您必须创建 CustomListAdapter 的对象,例如 CustomListAdapter adapterObj = new CustomListAdapter (getActivity(), dataList); -- getActivity() , dataList 是参数。 您是否将图像存储在数据库中?在这种情况下,无法使用 Picasso 获取图像。您必须将图像作为文件存储在服务器上。在数据库中存储图像的路径。【参考方案2】:

创建新类并将其命名为您想要的任何名称(此处为 AlbumList_Adapter.java)

public class AlbumList_Adapter extends BaseAdapter 

private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater = null;
public ImageLoader imageLoader;
String basePath = "http://example.com/imgFolder/";

public AlbumList_Adapter(Activity a, ArrayList<HashMap<String, String>> d) 
    activity = a;
    data = d;
    inflater = (LayoutInflater) activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    imageLoader = new ImageLoader(activity.getApplicationContext());


public int getCount() 
    return data.size();


public Object getItem(int position) 
    return position;


public long getItemId(int position) 
    return position;


public View getView(int position, View convertView, ViewGroup parent) 
    View vi = convertView;
    if (convertView == null)
        vi = inflater.inflate(R.layout.list_row_simple, null);

    TextView txtListItem = (TextView) vi.findViewById(R.id.txtListItem);
    ImageView imageView= (ImageView) vi.findViewById(R.id.imageView);

    HashMap<String, String> imgData = new HashMap<String, String>();
    imgData = data.get(position);

    txtListItem.setText(imgData.get("name"));

    Picasso.with(context)
         .load(basePath+ imgData.get("image"))
         .resize(100, 100)
         .centerCrop()
         .into(imageView);

    return vi;
    


在您的 code.java 文件中,在顶部声明适配器(在 onCreate() 之前,以便您可以在任何地方使用它)

AlbumList_Adapter adapter;

在你的json解析后的代码中

ArrayList<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();

            // looping through all nodes
            for (int i = 0; i < jsonArray.length(); i++) 

                jsonObject = jsonArray.getJSONObject(i);

                // creating new HashMap
                HashMap<String, String> map = new HashMap<String, String>();

                // adding each child node to HashMap
                map.put("name", jsonObject.getString("albumName"));
                map.put("image", jsonObject.getString("albumImage"));

                // adding HashMap to ArrayList
                dataList.add(map);
            
adapter = new AlbumList_Adapter(codeActivity.this, dataList);
list.setAdapter(adapter);

请注意,我使用的是 Hashmap。你应该使用你的数据结构。 (你可以使用Hashmap。然后你必须更新你的代码)

还有一点,AlbumList_Adapter.java 中的以下行引用了我为列表行创建的 xml 文件。

vi = inflater.inflate(R.layout.list_row_simple, null);

希望这个答案对您有所帮助。如果您在执行此操作时遇到问题,请告诉我。

编码愉快...

【讨论】:

【参考方案3】:

首先你必须得到毕加索实例

val picasso = Picasso.get()

然后你可以用一行代码加载。

picasso.load("your url").into(imageView)

请点击此链接作为参考 - https://www.androidbytes.in/image-loading-in-android-with-picasso/

【讨论】:

以上是关于如何使用毕加索图书馆的主要内容,如果未能解决你的问题,请参考以下文章

如何在列表视图中使用毕加索

如何清理毕加索的内存缓存?

如何在不模糊或使用毕加索的情况下调整图像大小

mysql时间字段加索引后如何生效

如果图像大于 Glide 中请求的大小,如何仅按比例缩小图像?

android:用毕加索创建圆形图像