我找到了一些非常不错的指南,说明如何将MySQL数据库中的图像加载到自定义列表视图中。
数据库由4列组成:id,product_name,product_price和product_image,其中产品图片具有图片的网址(当前使用phpmyadmin和wamp)。
该代码基本上可以正常工作并且可以读取数据,但是由于某种原因,它没有在列表中显示图像,仅显示名称和价格。
用于创建列表的代码为:
public class CustomListAdapter extends ArrayAdapter<Product_List> {
ArrayList<Product_List>productList;
Context context;
int resource;
public CustomListAdapter(@NonNull Context context, int resource, @NonNull ArrayList<Product_List> productList) {
super(context, resource, productList);
this.productList=productList;
this.context=context;
this.resource=resource;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
if (convertView==null){
LayoutInflater layoutInflater=(LayoutInflater)getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView=layoutInflater.inflate(R.layout.custom_list,null,true);
}
Product_List pr=getItem(position);
ImageView primg=(ImageView)convertView.findViewById(R.id.prImg);
TextView prname=(TextView)convertView.findViewById(R.id.txtName);
TextView prprice=(TextView)convertView.findViewById(R.id.txtPrice);
Picasso.with(context)
.load(pr.getPrImg())
.into(primg);
prname.setText(pr.getPrName());
prprice.setText(pr.getPrPrice());
return convertView;
}
}
主要功能是:
public class MainActivity extends AppCompatActivity {
private static final String HI = "http://10.0.2.2/customlistview/productinfo.php";
ArrayList<Product_List>product;
ListView lv;
private JsonArrayRequest request;
private RequestQueue requestQueue;
private CustomListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView)findViewById(R.id.listview);
product=new ArrayList<>();
getData();
}
private void getData() {
request=new JsonArrayRequest(HI, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
JSONObject jsonObject;
for (int i=0; i<response.length(); i++){
try {
jsonObject=response.getJSONObject(i);
Product_List productList=new Product_List(jsonObject.getString("product_name"),
jsonObject.getString("product_price"),
jsonObject.getString("product_image"));
product.add(productList);
} catch (JSONException e) {
e.printStackTrace();
}
}
setupData(product);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
requestQueue = Volley.newRequestQueue(this);
requestQueue.add(request);
}
private void setupData(ArrayList<Product_List> product) {
adapter=new CustomListAdapter(getApplicationContext(),R.layout.custom_list,product);
lv.setAdapter(adapter);
}
}
我得到的结果如下:
我的数据库所在的位置:
有没有理由不起作用?
据我了解,这是由于picasso.with(context.load...
行造成的。
谢谢
答案:
因此,我发现解决问题的方法是在数据库内图像的路径内部而不是将http://localhost/costumlistview ...更改为http://10.0.2.2/costumoistview。