JSONArray to Listview 我做错了什么



大家好,我现在已经搜索了错误或如何正确操作一段时间,是的,我认为这里的很多问题都帮助我更接近。

但是我有一个API,我在其中获得了JSONArray,我想在列表视图中显示这些数据。到目前为止,我在日志中获取了数据,现在我只是尝试显示每个对象的名称(然后我可以稍后添加其余数据(,但我不确定我是否在正确的位置,也许有人可以帮助我在这里并显示我做错了什么?

多谢

列表视图名称:全鸟

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_all_observation);
    mAuth = FirebaseAuth.getInstance();
    String URL="myAPI";
    RequestQueue requestQueue= Volley.newRequestQueue(this);

    JsonArrayRequest objectRequest = new JsonArrayRequest (Request.Method.GET, URL, null, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            Log.e("Rest Response",response.toString());
            try{
                for(int i=0; i<response.length();i++){
                    JSONObject jresponse = response.getJSONObject(i);
                    String NameDanish = jresponse.getString("NameDanish");
                    Log.d("NameDanish", NameDanish);

                }
            }catch(JSONException e){
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("Rest Response",error.toString());
        }
    });
    requestQueue.add(objectRequest);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.activity_all_observation, NameDanish);
    ListView list = (ListView) findViewById(R.id.AllBirds);
    list.setAdapter(adapter);
}

在类中创建 ArrayList

ArrayList

arrayList = new ArrayList<>((;

更改上面的代码

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_all_observation);
        mAuth = FirebaseAuth.getInstance();
        String URL = "myAPI";
        RequestQueue requestQueue = Volley.newRequestQueue(this);

        JsonArrayRequest objectRequest = new JsonArrayRequest(Request.Method.GET, URL, null, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                Log.e("Rest Response", response.toString());
                try {
                    for (int i = 0; i < response.length(); i++) {
                        JSONObject jresponse = response.getJSONObject(i);
                        String NameDanish = jresponse.getString("NameDanish");
                        arrayList.add(NameDanish);
                        Log.d("NameDanish", NameDanish);

                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("Rest Response", error.toString());
            }
        });
        requestQueue.add(objectRequest);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.activity_all_observation, arrayList);
        ListView list = (ListView) findViewById(R.id.AllBirds);
        list.setAdapter(adapter);
    }

像这样全局创建一个字符串数组列表

ArrayList<String> name_array=new ArrayList<>();

然后添加

         try{
            for(int i=0; i<response.length();i++){
                JSONObject jresponse = response.getJSONObject(i);
                String NameDanish = jresponse.getString("NameDanish");
                name_array.add(NameDanish);
                Log.d("NameDanish", NameDanish);
            }

然后将此数组列表传递给您的适配器

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.activity_all_observation, name_array);

创建列表视图、适配器、数组作为成员变量,并使用 notifyDataUpdate from responseHandler 更新数据。

    ListView mList;
    ArrayAdapter<String> mAdapter
    ArrayList<String> mData;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_all_observation);
        mData=new ArrayList<>();
        mList = (ListView) findViewById(R.id.AllBirds);
        mAdapter = new ArrayAdapter<String>(this, R.layout.activity_all_observation, mData);
        list.setAdapter(adapter);
        mAuth = FirebaseAuth.getInstance();
        String URL="myAPI";
        RequestQueue requestQueue= Volley.newRequestQueue(this);

        JsonArrayRequest objectRequest = new JsonArrayRequest (Request.Method.GET, URL, null, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                Log.e("Rest Response",response.toString());
                try{
                    for(int i=0; i<response.length();i++){
                        JSONObject jresponse = response.getJSONObject(i);
                        String NameDanish = jresponse.getString("NameDanish");
                        mData.add(NameDanish);
                        Log.d("NameDanish", NameDanish);
                    }
                    mAdapter.notifyDataSetChanged();
                }catch(JSONException e){
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("Rest Response",error.toString());
            }
        });
        requestQueue.add(objectRequest);
    }

正如 Toyj 所说,我现在已经将代码更改为此代码,我已经发布了我的 xml。

我没有得到任何数据,只有所有的名字都显示在日志中?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_all_observation);
    mAuth = FirebaseAuth.getInstance();
    final ArrayList arrayList = new ArrayList<>()
    String URL="MYAPI";
    RequestQueue requestQueue= Volley.newRequestQueue(this);

    JsonArrayRequest objectRequest = new JsonArrayRequest (Request.Method.GET, URL, null, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray response) {
            Log.e("Rest Response",response.toString());
            try{
                //JSONArray jsonArray = new JSONArray(response);
                for(int i=0; i<response.length();i++){
                    JSONObject jresponse = response.getJSONObject(i);
                    String NameDanish = jresponse.getString("NameDanish");
                    arrayList.add(NameDanish);
                    Log.d("NameDanish", NameDanish);

                }
            }catch(JSONException e){
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("Rest Response",error.toString());
        }
    });
    requestQueue.add(objectRequest);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.activity_all_observation, arrayList);
    ListView list = (ListView) findViewById(R.id.AllBirds);
    list.setAdapter(adapter);
}

JSON 数据看起来像这样,我只是以 NameDanish 开始

    {
    "BirdId": 1,
    "Comment": null,
    "Created": "/Date(1523836800000+0000)/",
    "Id": 132,
    "Latitude": 55.6886037,
    "Longitude": 12.5310135,
    "Placename": "K",
    "Population": 0,
    "UserId": "user1",
    "NameDanish": "solsort",
    "NameEnglish": "blackbird"
}

XML 文件

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="net.simplifiedlearning.firebaseauth.all_observationActivity">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/AllBirds">
    </ListView>
</LinearLayout>

相关内容

最新更新