0

我正在使用 json 通过 url 从 mysql 数据库中获取图像和名称。我可以在列表视图中查看图像。但不能查看名称。我想在 getview 方法中创建自定义视图。但是创建自定义视图它在 logcat 中显示错误。请查看我的代码并编辑我的代码发送给我

public class ImageAdapter extends BaseAdapter {
private static final Context Context = null;
String qrimage;
Bitmap bmp, resizedbitmap;
Activity activity = null;
private static LayoutInflater inflater = null;

private ImageView[] mImages;
String[] itemimage;
TextView[] tv;
String itemname;
HashMap<String, String> map = new HashMap<String, String>();

public ImageAdapter(Context context, JSONArray imageArrayJson) {
    this.mImages = new ImageView[imageArrayJson.length()];

    try {

        for (int i = 0; i < imageArrayJson.length(); i++) {
            JSONObject image = imageArrayJson.getJSONObject(i);
            qrimage = image.getString("itemimage");
            itemname = image.getString("itemname");
            map.put("itemname", image.getString("itemname"));
            System.out.println(itemname);

            byte[] qrimageBytes = Base64.decode(qrimage.getBytes());

            bmp = BitmapFactory.decodeByteArray(qrimageBytes, 0,
                    qrimageBytes.length);
            int width = 100;
            int height = 100;
            resizedbitmap = Bitmap.createScaledBitmap(bmp, width, height,
                    true);

            mImages[i] = new ImageView(context);
            mImages[i].setImageBitmap(resizedbitmap);

            mImages[i].setScaleType(ImageView.ScaleType.FIT_START);

            inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            // tv[i].setText(itemname);
        }

    } catch (Exception e) {
        // TODO: handle exception
    }
}

public int getCount() {
    return mImages.length;
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}
 public class ViewHolder {
        TextView text;
    }


public View getView(int position, View convertView, ViewGroup parent) {



//  return mImages[position];
      ViewHolder holder = new ViewHolder();
        if (convertView == null){
            convertView = inflater.inflate(R.layout.listview, null);
            holder.text = (TextView)convertView.findViewById(R.id.text);

            convertView.setTag(holder);
        }else{
            holder = (ViewHolder)convertView.getTag();
        }

        holder.text.setText(map.get("itemname"));
        return convertView;
    }


}

布局xml

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content">
   <ImageView
  android:id="@+id/image"
  android:layout_width="50dip"
  android:layout_height="50dip" android:src="@drawable/stub"    
 android:scaleType="centerCrop"/>
 <TextView
  android:id="@+id/text"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_weight="1"  android:textSize="20dip" 
  android:layout_marginLeft="10dip"/>
 </LinearLayout>

我想将 imageview 和 itemname 中的 mimage 附加到 textview。最后我想要 mimages 和 itemname 作为 listview

4

3 回答 3

1
  1. 不要使用语句,

    私有静态 LayoutInflater inflater = null;

只需将其保留为

private static LayoutInflater inflater;
  1. 不要将充气机放在 for...loop 和 try{}catch 块中。如果它抛出异常,您的充气机将不会被初始化。

  2. 在构造函数本身的第一行初始化充气机。

  3. 交替使用,

    充气机 = LayoutInflater.from(context);

在您的构造函数中,

  1. 检查您创建哈希图的方式,它是错误的。
  2. 您的持有者需要一个 Imageview,您需要在 getView() 中与 TextView 一起更新它。
于 2012-03-28T04:59:13.013 回答
1

尝试

convertView = activity.getLayoutInflater().inflate(R.layout.listview, null);
于 2012-03-28T05:03:26.347 回答
0

我建议您将字符串数组而不是 JSONArray 传递给 ImageAdapter 类。在调用 setAdapter 之前获取所有值,将它们存储到 String 数组中并传递它。您需要相应地更改 ImageAdapter 类。

于 2012-03-28T04:52:50.217 回答