【问题标题】:JSONArray to Listview what am i doing wrong?JSONArray 到 Listview 我在做什么错?
【发布时间】:2018-04-17 10:02:54
【问题描述】:

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

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

非常感谢

列表视图名称:AllBirds

    @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);
}

【问题讨论】:

  • 这里是什么NameDanish
  • 能否也粘贴 JSONArray 响应
  • 过去的 json 响应
  • 您可以在 ArrayAdapter 中传递字符串值(NameDanish)。请在 ArrayAdapter 中传递 String 数组或 Arraylist。
  • 我已将底部的所有代码作为问题添加。我尝试调试 på 代码,但在我的数组列表中什么也没有,但我仍然在我的日志中看到所有名称。

标签: java android json listview


【解决方案1】:

在你的类中创建 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);
    }

【讨论】:

  • 抱歉把我的评论放久了,看看:)
【解决方案2】:

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

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);

【讨论】:

    【解决方案3】:

    创建listView、adapter、array作为成员变量,并使用responseHandler中的notifyDataUpdate来更新数据。

        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);
        }
    

    【讨论】:

      【解决方案4】:

      正如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>
      

      【讨论】:

        猜你喜欢
        • 2016-03-02
        • 1970-01-01
        • 2017-09-29
        • 1970-01-01
        • 2019-05-15
        • 2013-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多