Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中显示json数据时,Listview仅显示一行_Android_Json_Listview - Fatal编程技术网

在android中显示json数据时,Listview仅显示一行

在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

我试图在android的listview中显示json数据。我得到的json数据非常完美,但当我试图在listview中显示它时,只得到一行。 我想按项目单击显示活动中每一行的数据。在这里,我不理解如何根据单击的项目从json传递数据

这是我的密码:

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上的所有项目。