Android使用BaseAdapter将JsonArray转换为Listview中的数组

gosulove

我已经使用BaseAdapter设置了一个Listview,到目前为止,它可以通过setOnItemClickListener正常工作但这很难编码。

在此处输入图片说明

Main2Activity.java

String sku[]={"1","2","3","4"};
String name[]={"Bad Food","Very Bad Food","Extremly Bad Food","Super Bad Food"};
String price[]={"99","999","9999","99999"};
String quantity[]={"123","456","789","101112"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    ListView listView = (ListView) findViewById(R.id.listView);
    listView.setAdapter(new my_adapter(Main2Activity.this,sku,name,price,quantity));

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Toast.makeText(Main2Activity.this, "Sku->"+sku[i]
                    +" Name->"+name[i]
                    +" Price->"+price[i]
                    +" Quantity->"+quantity[i]
                    ,Toast.LENGTH_SHORT).show();
        }
    });

}

my_adapter.java

public class my_adapter extends BaseAdapter {

Context ctx;
LayoutInflater inflater=null;

String sku[];
String name[];
String price[];
String quantity[];

public my_adapter(Context ctx, String sku[], String name[], String price[],String quantity[]){
    this.ctx=ctx;
    this.sku=sku;
    this.name=name;
    this.price=price;
    this.quantity=quantity;
}

@Override
public int getCount() {
    return sku.length;
}

@Override
public Object getItem(int i) {
    return null;
}

@Override
public long getItemId(int i) {
    return i;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    View row=view;

    if(row==null){
        inflater=(LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row=inflater.inflate(R.layout.rows,null);
    }

    TextView product_sku=(TextView)row.findViewById(R.id.sku);
    TextView product_name=(TextView)row.findViewById(R.id.name);
    TextView product_price=(TextView)row.findViewById(R.id.price);
    TextView product_quantity=(TextView)row.findViewById(R.id.quantity);

    product_sku.setText(sku[i]);
    product_name.setText(name[i]);
    product_price.setText(price[i]);
    product_quantity.setText(quantity[i]);

    return row;
}
}

接下来,我需要执行类似的操作,将JsonArray转换为Array,然后在setOnItemClickListener中使用它。这意味着,我需要将json中的所有数据存储到4个数组中,然后在以后单击该项目时使用任何元素。就像我的硬编码示例一样。

我已经看到了一些有关HashMap的示例,以及一些JsonArray对数组模板进行编码的示例,但不确定如何将它们与ListView和baseAdapter结合使用。

获取json数据

JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {

    @Override
    public void onResponse(JSONObject response) {
        // working with HashMap or Arraylist?????
    }
}, new Response.ErrorListener() {

    @Override
    public void onErrorResponse(VolleyError error) {
        // TODO Auto-generated method stub
    }
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(jsObjRequest);

本地主机/web_service/ohno.php

{
"482":["1","Chicken Rice","1","1"],  //Unique ID, sku,name,price,quantity
"483":["1","French Fries","1","1"],
"484":["1","apple","1","1"],
"492":["1","western+italian","1","1"],
"493":["1","no_cat","1","1"]
}

我在Listview中设置的格式与上述Json格式(4列)完全相同,除了Json格式还有一个额外的元素,即“唯一产品ID”。

android_dev

实际创建Model类或使用成员变量(例如sku,名称,价格,数量,id)说POJO类将是理想的。该代码可能看起来像

public class Item {
    private int id;
    private String sku;
    private String name;
    private String price;
    private String quantity;
}

得到json解析后,创建类似的Item列表

public void parseJson(String data) {
    ArrayList<Item> items = new ArrayList<Item>();

    //Parsing logic goes here
}

一旦完成了项目列表的创建,您就可以让ArrayAdapter或BaseAdapter接受它,然后遍历该列表并设置适当的值。在我看来,这似乎是正确的方法,而不是创建单独的数组,然后将其传递给BaseAdapter。

希望这可以帮助你。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章