我知道已经回答了几个类似的问题,但由于我对Android开发很新,我无法弄清楚如何自己解决这个问题。这个问题非常明显。我正在通过HTTP请求从数据库中获取数据,并希望将该数据调整到列表视图中。我正在使用Volley来处理我的HTTP请求,下面是我的onResponse
方法。
其他一切都很完美,我还没有找到一种方法来将这些数据调整到列表视图中。
@Override
public void onResponse(String response) {
Log.d(TAG, response.toString());
// If we are getting success from server
try {
JSONObject jObject = new JSONObject(response);
int count = jObject.getInt("count");
if(count == 0) {
noEventsTextView.setText(jObject.getString("msg").toString());
noEventsTextView.setGravity(Gravity.CENTER);
noEventsImageView.setVisibility(View.VISIBLE);
} else {
JSONArray childArray = jObject.getJSONArray("lectures");
for(int i = 0; i < childArray.length(); i++) {
JSONObject finalObject = childArray.getJSONObject(i);
// TODO Adapt data to listView
}
}
} catch(JSONException e) {
e.printStackTrace();
}
}
}
这是我从服务器回来的JSON示例:
{
count: 2,
msg: "",
lectures: [
{
id: "1",
starting_at: "2015-11-30 13:00:00",
ending_at: "2015-11-30 15:00:00",
user_id: "1",
course: "Course #1",
user_name: "John Doe"
},
{
id: "2",
starting_at: "2015-11-30 13:00:00",
ending_at: "2015-11-30 15:00:00",
user_id: "1",
course: "Course #2",
user_name: "John Doe"
}
]
}
答案 0 :(得分:0)
为Json
的每个键值对创建数组变量。
并将所有这些变量传递给listview
。
新Listadapter(this,id[],starting_at[],ending_at[],user_id[],course[],username[]);
或者有一个名为Gson
的概念。
这将允许您在不使用数组的情况下将数据写入Serializable
类。
在将数据分配给这些类之后,您可以将Serializable
类传递给适配器并在适配器getView方法中使用它。
有一个简单的tutorial,我写这篇文章是为了将数据分配给可序列化的类,认为它会给你一个想法。
希望它有所帮助。答案 1 :(得分:0)
使用Jackson创建一个Json的每个键值对的类,并将json映射到该类,并将该类的通用列表添加到List Adapter。 喜欢
Custom Class{
String id;
String starting_at;
String ending_at;
String user_id;
String course ;
String username;
}
通过Jackson将您的回复映射到ArrayList 然后 ListAdapter(ArrayList中) https://w2davids.wordpress.com/android-json-parsing-made-easy-using-jackson/
你准备好了.......你也可以使用gson但杰克逊有点快,所以你可以根据你的需要去找任何人......
希望它有所帮助。答案 2 :(得分:0)
你可以拥有一个包含讲座所有关键词的POJO。
<强> DataPOJO.java 强>
public class DataPOJO {
private int id;
private String starting_at;
private String ending_at;
private String user_id;
private String course;
private String user_name;
}
在onResponse中:
@Override
public void onResponse(String response) {
Log.d(TAG, response.toString());
// If we are getting success from server
try {
JSONObject jObject = new JSONObject(response);
int count = jObject.getInt("count");
if(count == 0) {
noEventsTextView.setText(jObject.getString("msg").toString());
noEventsTextView.setGravity(Gravity.CENTER);
noEventsImageView.setVisibility(View.VISIBLE);
} else {
JSONArray childArray = jObject.getJSONArray("lectures");
ArrayList<DataPOJO> datas = new ArrayList<DataPOJO>();
for(int i = 0; i < childArray.length(); i++) {
JSONObject finalObject = childArray.getJSONObject(i);
DataPOJO data = new DataPOJO;
data.id = finalObject.getInt("id");
data.starting_at = finalObject.getString("starting_at");
//so on
//add data to arraylist......
datas.add(data);
}
//set adapter of your listview here, you have to have an instance of your list view
listView.setAdapter(new MyAdapter(datas, context));
}
} catch(JSONException e) {
e.printStackTrace();
}
}
}
<强> MyAdapter.java 强>
public class MyAdapter extends BaseAdapter {
private Context mContext;
private ArrayList<DataPOJO> listItem;
public MyAdapter(Context mContext, ArrayList<DataPOJO> listItem) {
this.mContext = mContext;
this.listItem = listItem;
}
@Override
public int getCount() {
return listItem.size();
}
@Override
public Object getItem(int position) {
return listItem.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_items, null);
((TextView) convertView.findViewById(R.id.name)).setText(listItem.get(position).user_name);
return convertView;
}
}
<强> list_items.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="#000"
android:textSize="18sp"/>
</RelativeLayout>