如何在doInBackground中的ArrayList <object>中添加获取的数据[Android]

时间:2016-09-06 04:45:45

标签: java android arraylist

我的目标是将已提取的JSON放入我的ArrayList<Object>,以便能够显示我的ListView我正在搜索语法如何操作,但我是m混淆了如何正确地做到这一点。

这是我的代码

public class MyListActivity extends ActivityWithTabBar implements
    OnGestureListener, OnTouchListener {

  private String searchText = null;
  private ArrayList<ListItems> itemsArray = null;
  private MyArrayAdapter myArrayAdapter;
  private ListView lv = null;

  public void onCreate(Bundle savedInstanceState) {
  searchText = intent.getStringExtra(Constants.SEARCH).trim();
  performSearch();

  }

  private void performSearch() {
    searchText = editTextSearch.getText().toString();
    loadDataViaWS();
  }

  private void loadDataViaWS(){
    itemsArray = new ArrayList<ListItems>();
    lv = (ListView) findViewById(R.id.listViewSearch);
    this.myArrayAdapter = new MyArrayAdapter(this,
            R.layout.listview_row_2rows_subtitle, itemsArray);
    lv.setAdapter(this.myArrayAdapter);

    new GetValues().execute();
}

这是我的AsyncTask

class GetValues extends AsyncTask<Void, Void, ArrayList<ListItems>> { 
 private final String URL_STRING = url;
HttpClient httpclient = new DefaultHttpClient();
 HttpGet httpget = new HttpGet(URL_STRING);
String jsonData = null;

@Override 
 protected ArrayList<ListItems> doInBackground(Void... params){
 try {
            HttpResponse response = httpclient.execute(httpget);
            jsonData =  EntityUtils.toString(response.getEntity());
            Log.d(TAG, String.format("JSON:", jsonData));

        } catch (IOException e) {
            e.printStackTrace();
        }

itemsArray = new ArrayList<ListItems>();
        JSONObject object = null;
        try {
            object = new JSONObject(jsonData);
            JSONArray jArray  = object.getJSONArray("DATA");

            for(int i = 0; i < jArray.length(); i++){
                JSONObject jObj = jArray.getJSONObject(i);

                String Id = jObj.getString("id");
                String Name = jObj.getString("name");
                String Description = jObj.getString("description");


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


        return null;
}

正如您在doInBackground循环中的for内看到的那样,我如何将我JSONObject中提取的itemsArray放在itemsArray等于ArrayList<ListItems>的位置public class ListItems implements Serializable { private int id; private String name; private String description; public String getName() { return name; } public void setName(String name) { this.name = name; }

修改

这是我的ListItems

{{1}}

5 个答案:

答案 0 :(得分:1)

你几乎所有在这里工作的所有你需要做的就是像这样创建一个新的ListItems

for(int i = 0; i < jArray.length(); i++){
    JSONObject jObj = jArray.getJSONObject(i);

    String Id = jObj.getString("id");
    String Name = jObj.getString("name");
    String Description = jObj.getString("description");

    ListItems item = new ListItems();
    item.setId(id);
    item.setName(Name);
    item.setDescription(Description);

    itemsArray.add(item);
}

答案 1 :(得分:1)

覆盖postExecute方法,例如,将项目添加到arraylist,请按照之前的答案进行操作

@Override
protected void onPostExecute(ArrayList<ListItems> items)
{
  myArrayAdapter = new MyArrayAdapter(this,R.layout.listview_row_2rows_subtitle, itemsArray);
//Declare Listview as global
listView.setAdapter(myArrayAdapter);
}

这应该适合你。

答案 2 :(得分:1)

我在这里修改了你的代码

class ListItems{
private id,name,description;

public ListItems(){}

public void setId(String id){
this.id=id;
}

public String getId(){
return id;
}

public void setName(String name){
this.name=name;
}

public String getName(){
return name;
}

public void setDescription(String description){
this.description=description;
}

public String getDescription(){
return description;
}
}

这是您的POJO课程

{{1}}

希望这会对你有所帮助。

答案 3 :(得分:0)

假设您的模型类ListItems使用了setId(String id)setName(String name)setDescription(String desc)等设置方法。

你的for循环应该看起来像

    for(int i = 0; i < jArray.length(); i++){
            JSONObject jObj = jArray.getJSONObject(i);

            String Id = jObj.getString("id");
            String Name = jObj.getString("name");
            String Description = jObj.getString("description");

            ListItems items = new ListItems();
            items.setId(Id);
            items.setName(Name);
            items.setDescription(Description);

            itemsArray.add(items);
    }
// Notify your adapter here.. after adding data into your `ArrayList`. You should do that stuff in `PostExecute()` method of an `AsyncTask`.

希望这有帮助!

答案 4 :(得分:0)

对于ListView,您必须实现一个BaseAdapter,它将您的arraylist项目绑定到您的视图列表。一旦使用ArrayList调用适配器,它就会将视图呈现到ListView上。如果你再次获取项目并且之前有更新的元素,只需调用notifyDataSetChanged()。

这可能会有所帮助:Android. How does notifyDataSetChanged() method and ListViews work?