使用JSON从API获取数据并将两个对象存储在Array Adapter的单行中

时间:2017-01-19 05:44:04

标签: java android json listview android-arrayadapter

我已经获得了这个代码,并提取了" rate"来自API的数据,以及" rate",我需要得到" name"。如果我得到" name"它经常将它绑定在"率"。

之下

我需要它加入列表视图的同一行,所以它就像[Rate Name]。

我需要获取JSON数组的两个对象并将其绑定到数组适配器,这样我就可以在列表视图的同一行中显示两个对象,因此它更加用户友好。

下面的代码是AsyncTask,代码工作正常,但我需要再添加一个对象并确保它显示为一个速率 - 一个名称然后迭代循环并根据需要以相同的顺序添加更多。

public class AsyncTaskParseJson extends AsyncTask<String, String, String> {

    // the url of the web service to call
    String yourServiceUrl = "eg: URL";

    @Override
    protected void onPreExecute() {
    }

    String filename = "bitData";

    @Override
    protected String doInBackground(String... arg0) {

        try {
            // create new instance of the httpConnect class
            httpConnect jParser = new httpConnect();

            // get json string from service url
            String json = jParser.getJSONFromUrl(yourServiceUrl);

            // parse returned json string into json array
            JSONArray jsonArray = new JSONArray(json);

            // loop through json array and add each currency to item in arrayList
            //Custom Loop Initialise
            for (int i = 1; i < 8; i++) {
                JSONObject json_message = jsonArray.getJSONObject(i);
             // The second JSONObject which needs to be added 
                JSONObject json_name = jsonArray.getJSONObject(i);

                if (json_message != null) {
                    //add each currency to ArrayList as an item
                    items.add(json_message.getString("rate"));


                    String bitData = json_message.getString("rate");


                    String writeData = bitData + ',' +'\n';

                    FileOutputStream outputStream;
                    File file = getFileStreamPath(filename);


                    // first check if file exists, if not create it
                    if (file == null || !file.exists()) {
                        try {
                            outputStream = openFileOutput(filename, MODE_PRIVATE);
                            outputStream.write(writeData.getBytes());
                            outputStream.write("\r\n".getBytes());
                            outputStream.close();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    // if file already exists then append bit data to it
                    else if (file.exists()) {
                        try {
                            outputStream = openFileOutput(filename, Context.MODE_APPEND);
                            outputStream.write(writeData.getBytes());
                            outputStream.write("\r\n".getBytes());
                            outputStream.close();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }

                }
            }


        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;


    }

    // below method will run when service HTTP request is complete, will then bind text in arrayList to ListView
    @Override
    protected void onPostExecute(String strFromDoInBg) {

        ListView list = (ListView) findViewById(R.id.rateView);
        ArrayAdapter<String> rateArrayAdapter = new ArrayAdapter<String>(BitRates.this, android.R.layout.simple_expandable_list_item_1, items);
        list.setAdapter(rateArrayAdapter);

    }
}

2 个答案:

答案 0 :(得分:2)

只需创建自定义类消息:

public class Item{
   private String name;
   private String rate;

   public void Message(String n, String r){
      this.name=n;
      this.rate=r;
 }
// create here getter and setter
}

现在在您的后台,您必须在Message class

中添加名称和费率
 Public class MainAcitity extends Activity{    
   public static List<Item> items= new ArrayList<>();// define in inside the class

//这必须落在后台

Item i=new Item(json_message.getString("name"),json_message.getString("rate"));
items.add(i);

现在传递这个listmessge onPostExecute:

    ListView list = (ListView) findViewById(R.id.rateView);
    ArrayAdapter<String> rateArrayAdapter = new ArrayAdapter<String>(BitRates.this, android.R.layout.simple_expandable_list_item_1, items);
    list.setAdapter(rateArrayAdapter);

这对你有帮助。

答案 1 :(得分:0)