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

如何使用Fast Android Networking库在Android中展示JSON结果

解决Fast Android Networking库展示JSON数据到TextView/ListView的问题

嗨,看起来你已经成功通过Fast Android Networking拿到完整的JSON响应了,接下来咱们一步步实现把数据展示到TextView和ListView的需求~


一、将特定JSON对象/字符串展示在TextView中

假设你的JSON响应里包含用户信息(比如username、email这类字段),你可以直接在onResponse回调里解析字段,然后设置到TextView上。

修改你的现有代码:

@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onResponse(JSONObject response) {
    Log.e("READ", response.toString());
    
    try {
        // 从JSON响应中提取需要展示的字段,替换成你实际的字段名
        String username = response.getString("username");
        String email = response.getString("email");
        // 用optString避免字段不存在时崩溃,第二个参数是默认值
        String userBio = response.optString("bio", "暂无个人简介");
        
        // 拼接成友好的展示文本
        String displayContent = String.format("用户名:%s\n邮箱:%s\n简介:%s", username, email, userBio);
        
        // 找到布局中的TextView并设置文本,替换成你布局里的实际id
        TextView userInfoTv = findViewById(R.id.tv_user_info);
        userInfoTv.setText(displayContent);
        
    } catch (JSONException e) {
        e.printStackTrace();
        // 解析失败时给用户提示
        TextView userInfoTv = findViewById(R.id.tv_user_info);
        userInfoTv.setText("加载用户信息失败,请稍后重试");
    }
}

小提示:

  • 优先用optString()替代getString(),当目标字段不存在时,会返回你指定的默认值,避免抛出异常导致崩溃。
  • 一定要确保布局里的TextView id和代码里的一致,不然会出现空指针异常哦。

二、将JSON数组展示在ListView中

如果响应里包含JSON数组(比如用户的动态列表、商品列表),需要配合自定义适配器来实现,步骤如下:

1. 创建数据模型类

先封装数组中的每个对象,比如假设数组里是文章数据,创建Post.java:

public class Post {
    private String title;
    private String content;

    public Post(String title, String content) {
        this.title = title;
        this.content = content;
    }

    // Getter方法,供适配器获取数据
    public String getTitle() {
        return title;
    }

    public String getContent() {
        return content;
    }
}

2. 创建列表项布局

在res/layout下新建item_post.xml,定义每个列表项的样式:

<?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="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/tv_post_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textStyle="bold"/>

    <TextView
        android:id="@+id/tv_post_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:layout_marginTop="8dp"/>

</LinearLayout>

3. 自定义ListView适配器

创建PostAdapter.java,负责把数据绑定到列表项上,同时用ViewHolder优化性能:

public class PostAdapter extends BaseAdapter {
    private Context mContext;
    private List<Post> mPostList;

    public PostAdapter(Context context, List<Post> postList) {
        mContext = context;
        mPostList = postList;
    }

    @Override
    public int getCount() {
        return mPostList.size();
    }

    @Override
    public Object getItem(int position) {
        return mPostList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        // 复用convertView减少布局加载次数
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.item_post, parent, false);
            holder = new ViewHolder();
            holder.titleTv = convertView.findViewById(R.id.tv_post_title);
            holder.contentTv = convertView.findViewById(R.id.tv_post_content);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        // 绑定数据到列表项
        Post currentPost = mPostList.get(position);
        holder.titleTv.setText(currentPost.getTitle());
        holder.contentTv.setText(currentPost.getContent());

        return convertView;
    }

    // ViewHolder避免重复调用findViewById
    private static class ViewHolder {
        TextView titleTv;
        TextView contentTv;
    }
}

4. 在回调中解析数组并设置适配器

修改onResponse方法,解析JSON数组并绑定到ListView:

@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onResponse(JSONObject response) {
    Log.e("READ", response.toString());
    
    try {
        // 从响应中获取JSON数组,替换成你实际的数组键名,比如"posts"
        JSONArray postsArray = response.getJSONArray("posts");
        
        // 解析数组到List<Post>
        List<Post> postList = new ArrayList<>();
        for (int i = 0; i < postsArray.length(); i++) {
            JSONObject postObj = postsArray.getJSONObject(i);
            String title = postObj.getString("title");
            String content = postObj.getString("content");
            postList.add(new Post(title, content));
        }
        
        // 初始化ListView并设置适配器,替换成你布局中ListView的id
        ListView postsLv = findViewById(R.id.lv_posts);
        PostAdapter adapter = new PostAdapter(YourActivity.this, postList);
        postsLv.setAdapter(adapter);
        
    } catch (JSONException e) {
        e.printStackTrace();
        // 解析失败时提示用户
        Toast.makeText(YourActivity.this, "加载列表失败", Toast.LENGTH_SHORT).show();
    }
}

小提示:

  • 如果是在Fragment中操作,需要用getView().findViewById()来获取控件实例。
  • Fast Android Networking的回调默认是在主线程执行的,所以不需要额外切换线程更新UI;如果遇到UI更新异常,可以用runOnUiThread()包裹UI操作代码。

内容的提问来源于stack exchange,提问作者Md Anik Rahaman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:21:40