在android中显示json数据时,Listview仅显示一行
我试图在android的listview中显示json数据。我得到的json数据非常完美,但当我试图在listview中显示它时,只得到一行。 我想按项目单击显示活动中每一行的数据。在这里,我不理解如何根据单击的项目从json传递数据 这是我的密码:在android中显示json数据时,Listview仅显示一行,android,json,listview,Android,Json,Listview,我试图在android的listview中显示json数据。我得到的json数据非常完美,但当我试图在listview中显示它时,只得到一行。 我想按项目单击显示活动中每一行的数据。在这里,我不理解如何根据单击的项目从json传递数据 这是我的密码: public class CustomAdapter extends ArrayAdapter { List list = new ArrayList(); public CustomAdapter(Context context, int res
public class CustomAdapter extends ArrayAdapter {
List list = new ArrayList();
public CustomAdapter(Context context, int resource) {
super(context, resource);
}
public void add(DataProvider dataProvider) {
super.add(dataProvider);
list.add(dataProvider);
}
@Override
public int getCount() {
return list.size();
}
@Nullable
@Override
public Object getItem(int position) {
return list.get(position);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View row = convertView;
dataProviderHolder holder;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.custom_list, parent, false);
holder = new dataProviderHolder();
holder.name = (TextView) row.findViewById(R.id.name);
holder.subject = (TextView) row.findViewById(R.id.subject);
holder.date = (TextView) row.findViewById(R.id.date);
holder.time = (TextView) row.findViewById(R.id.tim);
row.setTag(holder);
} else {
holder = (dataProviderHolder) row.getTag();
}
DataProvider provider = (DataProvider) this.getItem(position);
holder.name.setText(provider.getName());
holder.subject.setText(provider.getSubject());
holder.date.setText(provider.getDate());
holder.time.setText(provider.getTime());
return row;
}
static class dataProviderHolder {
TextView name, subject, date, time;
}
}
Json解析:
listView = (ListView) findViewById(R.id.list);
sessionManager = new SessionManager(this);
listView.setAdapter(customAdapter);
HashMap<String, String> user = sessionManager.getUserDetails();
json_string = user.get(SessionManager.JSON_STRING);
try {
String name, subject, message, date, time;
jsonObject = new JSONObject(json_string);
jsonArray = jsonObject.getJSONArray("message");
int count = 0;
while (count < jsonObject.length()) {
JSONObject object = jsonArray.getJSONObject(count);
name = object.getString("name");
subject = object.getString("subject");
message = object.getString("message");
date = object.getString("date");
time = object.getString("time");
sessionManager.getJsonMesssage(message);
DataProvider dataProvider = new DataProvider(name, subject, date, time);
customAdapter.add(dataProvider);
count++;
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
HashMap<String, String> user = sessionManager.getUserDetails();
String message = user.get(SessionManager.JSON_MESSAGE);
Intent i = new Intent(MessageList.this, MessageDetails.class);
i.putExtra("message", message);
startActivity(i);
}
});
}
} catch (JSONException e) {
e.printStackTrace();
}
listView=(listView)findviewbyd(R.id.list);
sessionManager=新的sessionManager(this);
setAdapter(customAdapter);
HashMap user=sessionManager.getUserDetails();
json_string=user.get(SessionManager.json_string);
试一试{
字符串名称、主题、消息、日期、时间;
jsonObject=新的jsonObject(json_字符串);
jsonArray=jsonObject.getJSONArray(“消息”);
整数计数=0;
while(count
首先,不要将listview.setOnItemClickListener放入循环中。那没用。而是将其添加到适配器的getView()方法中`
row.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
HashMap<String, String> user = sessionManager.getUserDetails();
String message = user.get(SessionManager.JSON_MESSAGE);
Intent i = new Intent(context, MessageDetails.class);
i.putExtra("message", message);
startActivity(i);
}
});
row.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
HashMap user=sessionManager.getUserDetails();
String message=user.get(SessionManager.JSON_message);
意图i=新意图(上下文,MessageDetails.class);
i、 putExtra(“消息”,消息);
星触觉(i);
}
});
然后,在while循环中添加所有列表项后设置适配器。您只获得一个数据,因此它只显示一个数据。您尝试过customAdapter。notifyDatasetChanged()在将项???+1添加到@SujithNiraikulathan后,添加
notifyDatasetChanged()
作为适配器方法add(DataProvider)
中最后一行(在list.add()之后),也在while循环中添加一个Log.i()
,以确保有多少项被添加到适配器中,可能您在json中得到了1项,同样根据下面的Nirup答案,移动setOnItemClickListener()
在while循环之后,我无法获取listview上的所有项目。