将 JSON 数据放入列表 [英] Putting JSON data into a List

查看:49
本文介绍了将 JSON 数据放入列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的 JSON 数据正确地来自我的服务器,我只想将它放入以下数组,但我不确定 JSON 数据是否正确插入到 ArrayList 中.

I have my JSON data coming correctly from my server, I just want to put it into the following array but I'm not sure the JSON data is correctly being inserted into the ArrayList.

这是数组

private List<ShopInfo> createList(int size)  {
    List<ShopInfo> result = new ArrayList<ShopInfo>();
    for (int i = 1; i <= size; i++) {
        ShopInfo ci = new ShopInfo();
        ci.name =    TAG_NAME+i;
        ci.address = TAG_ADDRESS+i;
        result.add(ci);
    }
    return result;
}

我的 json

{"success":1,"shops":[{"name":"Test_Shop","address":"1 Big Road Dublin"}

文件

public class OrderCoffee extends Activity {

JSONParser jParser = new JSONParser();
ArrayList<HashMap<String, String>> shopList;
private static String url_all_products = "xxxxxxxxxx/ordercoffee.php";
// products JSONArray
JSONArray shops = null;


// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_SHOPS = "shops";
private static final String TAG_NAME = "name";
private static final String TAG_ADDRESS = "address";


//get a list of participating coffee shops in the locality that are using the app
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.order_coffee);
    new LoadAllProducts().execute();
    RecyclerView recList = (RecyclerView) findViewById(R.id.cardList);
    recList.setHasFixedSize(true);
    LinearLayoutManager llm = new LinearLayoutManager(this);
    llm.setOrientation(LinearLayoutManager.VERTICAL);
    recList.setLayoutManager(llm);
    shopList = new ArrayList<HashMap<String, String>>();
    ShopAdapter ca = new ShopAdapter(createList(3));
    recList.setAdapter(ca);

}


class LoadAllProducts extends AsyncTask<String, String, String> {


    @Override
    protected String doInBackground(String... args) {
        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        // getting JSON string from URL
        JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);

        // Check your log cat for JSON reponse
        Log.d("All Products: ", json.toString());

        try {
            // Checking for SUCCESS TAG
            int success = json.getInt(TAG_SUCCESS);

            if (success == 1) {
                // products found
                // Getting Array
                shops = json.getJSONArray(TAG_SHOPS);

                // looping through All Products
                for (int i = 0; i < shops.length(); i++) {
                    JSONObject c = shops.getJSONObject(i);

                    // Storing each json item in variable
                    String id = c.getString(TAG_ADDRESS);
                    String name = c.getString(TAG_NAME);

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

                    // adding each child node to HashMap key => value
                    map.put(TAG_ADDRESS, id);
                    map.put(TAG_NAME, name);

                    shopList.add(map);


                }
            } else {
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}


private List<ShopInfo> createList(int size)  {
    List<ShopInfo> result = new ArrayList<ShopInfo>();
    for (int i = 1; i <= size; i++) {
        ShopInfo ci = new ShopInfo();
        ci.name =    TAG_NAME+i;
        ci.address = TAG_ADDRESS+i;
        result.add(ci);
    }
    return result;
}
}

ShopAdapter

ShopAdapter

  package com.example.strobe.coffeetime;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;

/**
 * Created by root on 10/04/15.
 */
public class ShopAdapter extends RecyclerView.Adapter<ShopAdapter.ShopViewHolder> {

    private List<ShopInfo> shopList;

    public ShopAdapter(List<ShopInfo> shopList) {
        this.shopList = shopList;
    }


    @Override
    public int getItemCount() {
        return shopList.size();
    }

    @Override
    public void onBindViewHolder(ShopViewHolder shopViewHolder, int i) {
        ShopInfo ci = shopList.get(i);
        shopViewHolder.vName.setText(ci.name);
        shopViewHolder.vAddress.setText(ci.address);

    }

    @Override
    public ShopViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View itemView = LayoutInflater.
                from(viewGroup.getContext()).
                inflate(R.layout.card_layout, viewGroup, false);

        return new ShopViewHolder(itemView);
    }

    public static class ShopViewHolder extends RecyclerView.ViewHolder {

        protected TextView vName;
        protected TextView vAddress;


        public ShopViewHolder(View v) {
            super(v);
            vName =  (TextView) v.findViewById(R.id.name);
            vAddress = (TextView)  v.findViewById(R.id.address);

        }
    }
}

推荐答案

你应该把你的 onCreate 改成这个

You should change your onCreate to this

private RecyclerView recList;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.order_coffee);
    recList = (RecyclerView) findViewById(R.id.cardList);
    recList.setHasFixedSize(true);
    recList.setLayoutManager(new LinearLayoutManager(this));
    shopList = new ArrayList<HashMap<String, String>>();
    new LoadAllProducts().execute();
}

然后在 onPostExecute

And then in onPostExecute

protected void onPostExecute(String result) {
    List<ShopInfo> list = new ArrayList<ShopInfo>();
    for (int i = 0; i < shopList.size(); i++) {
        ShopInfo ci = new ShopInfo();
        HashMap<String, String> map = shopList.get(i)
        ci.name =    map.get(TAG_NAME);
        ci.address = map.get(TAG_ADDRESS);
        list.add(ci);
    }

    ShopAdapter ca = new ShopAdapter(list);
    recList.setAdapter(ca);
}

如果您不将 shopList 用于其他任何用途,您可以将其删除并将用于创建您传递给适配器的列表的代码移动到 doInBackground

If you are not using shopList for anything else you can remove it and move the code for creating the list you pass to the adapter to doInBackground

这篇关于将 JSON 数据放入列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆