如何向ListView中添加三个字符串?附JSON解析代码求助
把解析后的JSON数据填充到Android ListView
Got it! You're already set up with the JSON request and parsing—now let's get those three strings into your ListView. I'll walk you through the process using your existing code as a foundation:
1. 先搞定布局
确保你的Activity布局文件(比如activity_main.xml)里包含了ListView组件:
<ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"/>
2. 在Activity里声明必要变量
在你的Activity类顶部,添加ListView实例和存储数据的集合、适配器:
private ListView listView; private ArrayList<String> coinInfoList; // 用来存储组合后的字符串 private ArrayAdapter<String> adapter; // 连接数据和ListView的桥梁
3. 初始化ListView和适配器
在onCreate方法里完成初始化工作,然后调用你的解析方法:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = findViewById(R.id.listView); coinInfoList = new ArrayList<>(); // 使用系统默认的文本布局,简单快捷 adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, coinInfoList); listView.setAdapter(adapter); // 启动JSON解析 jsonParse(); }
4. 修改你的JSON解析代码,填充数据
更新你现有的jsonParse方法,把解析出的三个字段组合成一条内容,添加到集合后通知适配器刷新:
private void jsonParse(){ String url = "https://api.coinmarketcap.com/v1/ticker/"; JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) { coinInfoList.clear(); // 先清空旧数据,避免重复加载 for(int i = 0; i < response.length(); i++){ try { JSONObject coin = response.getJSONObject(i); String name= coin.getString("name"); // 注意:CoinMarketCap的v1 API里价格字段是"price_usd",不是"price",这里修正一下 String price = coin.getString("price_usd"); String change24 = coin.getString("percent_change_24h"); // 把三个字符串组合成一条易读的内容 String coinItem = name + "\n价格: $" + price + "\n24小时涨跌幅: " + change24 + "%"; coinInfoList.add(coinItem); } catch (JSONException e) { e.printStackTrace(); } } // 通知适配器数据更新,ListView会自动刷新显示 adapter.notifyDataSetChanged(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); } }); // 将请求加入Volley队列(如果还没初始化队列,这里直接创建即可) RequestQueue queue = Volley.newRequestQueue(this); queue.add(request); }
5. 别忘了加网络权限
在AndroidManifest.xml里添加网络访问权限,否则请求会失败:
<uses-permission android:name="android.permission.INTERNET" />
进阶:用自定义Adapter做更美观的列表
如果觉得系统默认布局太单调,可以自定义列表项样式:
- 创建
list_item_coin.xml布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <TextView android:id="@+id/tvCoinName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:textStyle="bold"/> <TextView android:id="@+id/tvPrice" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" android:layout_marginTop="4dp"/> <TextView android:id="@+id/tvChange" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" android:layout_marginTop="4dp"/> </LinearLayout>
- 创建
Coin实体类存储数据:
public class Coin { private String name; private String price; private String change24h; public Coin(String name, String price, String change24h) { this.name = name; this.price = price; this.change24h = change24h; } // Getter方法 public String getName() { return name; } public String getPrice() { return price; } public String getChange24h() { return change24h; } }
- 自定义
CoinAdapter:
public class CoinAdapter extends ArrayAdapter<Coin> { public CoinAdapter(Context context, ArrayList<Coin> coins) { super(context, 0, coins); } @Override public View getView(int position, View convertView, ViewGroup parent) { Coin coin = getItem(position); // 复用布局,提升性能 if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item_coin, parent, false); } // 绑定控件 TextView tvName = convertView.findViewById(R.id.tvCoinName); TextView tvPrice = convertView.findViewById(R.id.tvPrice); TextView tvChange = convertView.findViewById(R.id.tvChange); // 设置内容 tvName.setText(coin.getName()); tvPrice.setText("价格: $" + coin.getPrice()); tvChange.setText("24小时涨跌幅: " + coin.getChange24h() + "%"); // 根据涨跌设置文字颜色 float changeValue = Float.parseFloat(coin.getChange24h()); tvChange.setTextColor(changeValue > 0 ? Color.GREEN : Color.RED); return convertView; } }
- 修改Activity里的代码使用自定义Adapter:
// 替换原来的集合和适配器 private ArrayList<Coin> coinList; private CoinAdapter adapter; // onCreate里初始化 coinList = new ArrayList<>(); adapter = new CoinAdapter(this, coinList); listView.setAdapter(adapter); // 在jsonParse的onResponse里添加数据 Coin coinObj = new Coin(name, price, change24); coinList.add(coinObj);
这样就能得到更美观、交互性更强的列表啦!
内容的提问来源于stack exchange,提问作者Kazhiunea
相关产品推荐
相关产品推荐

