我的目标是将已提取的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}}
答案 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?