簡體   English   中英

將JSON數據解析為ListView

[英]Parse JSON data into a ListView

我知道已經回答了幾個類似的問題,但是由於我對Android開發非常陌生,所以我不知道該如何獨自解決。 這個問題是不言自明的。 我正在通過HTTP請求從數據庫中獲取數據,並希望將該數據改編為列表視圖。 我正在對HTTP請求使用Volley,下面是我的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"
  }
]
}

Json每個鍵值對創建數組變量。 並將所有這些變量傳遞到listview 新的Listadapter(this,id[],starting_at[],ending_at[],user_id[],course[],username[]);

或有一個叫做Gson的概念。 這將允許您在不使用數組的情況下將數據寫入Serializable類。 在將數據分配給這些類之后,您可以將Serializable類傳遞給適配器,並在適配器的getView方法中使用它。

我寫了一個簡單的教程 ,將數據分配給可序列化的類,認為它會給您一個想法。

希望能幫助到你。

創建每個Json鍵值對的類,並使用Jackson將json映射到該類,並將該類的通用列表添加到列表適配器。 喜歡

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,但是jackson的速度要快一些,因此您可以根據您的需要去找任何人...

希望能幫助到你。

您可以擁有一個POJO,其中包含演講所具有的所有鍵。

數據POJO.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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM