You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Volley解析JSON并在ListView展示时应用崩溃问题求助

解决ListView展示姓名崩溃的问题

嘿,我一眼就瞅出问题所在啦!你的Volley解析JSON的逻辑完全没问题,崩溃的核心原因是没有给Activity加载布局文件,导致ListView对象为null,调用setAdapter的时候直接炸了。下面给你一步步修复:

第一步:创建对应的布局文件

在res/layout目录下新建activity_main.xml,里面放一个id为nameList的ListView:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/nameList"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

第二步:修复MainActivity的onCreate方法

在onCreate里添加setContentView加载布局,这行代码是关键——没有它的话findViewById根本找不到控件:

public class MainActivity extends Activity {
    // json array response url
    private String urlJsonArry = "https://api.myjson.com/bins/1d60wu";
    private String jsonResponse;
    ListView nameList;
    // 添加上TAG常量,避免VolleyLog报错
    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 关键:加载布局文件,必须放在findViewById之前
        setContentView(R.layout.activity_main);
        nameList = (ListView) findViewById(R.id.nameList);

        JsonArrayRequest req = new JsonArrayRequest(urlJsonArry, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                try {
                    // 给ArrayList指定泛型,更规范
                    ArrayList<String> al = new ArrayList<>();
                    for (int i = 0; i < response.length(); i++) {
                        JSONObject person = (JSONObject) response.get(i);
                        al.add(person.getString("name"));
                    }
                    ArrayAdapter<String> adapter = new ArrayAdapter<>(getApplicationContext(),
                            android.R.layout.simple_list_item_1, al);
                    nameList.setAdapter(adapter);
                } catch (JSONException e) {
                    e.printStackTrace();
                    Toast.makeText(getApplicationContext(), "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });

        // Adding request to request queue
        RequestQueue rQueue = Volley.newRequestQueue(MainActivity.this);
        rQueue.add(req);
    }
}

额外优化提示

  • 给ArrayList指定String泛型,避免编译警告,代码更严谨
  • 添加了TAG常量,让Volley的日志输出正常工作
  • 确保你已经在AndroidManifest.xml里添加了网络权限:
<uses-permission android:name="android.permission.INTERNET" />

这样修改后,运行App就能正常把所有姓名展示在ListView里啦!

内容的提问来源于stack exchange,提问作者Opeyemi Sanusi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:15:17