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

Android中接收非JSON/空数据时的Activity处理及JSON数据传递问题

Android开发两类问题的解决方案

一、处理非JSON/空数据的提示弹窗

当你的Activity接收到空数据或者非JSON格式的数据时,核心思路是先做数据有效性校验,校验不通过就用弹窗给用户友好提示。这里结合你的MainAct1给出具体实现:

1. 数据校验逻辑

不管你是用HttpURLConnection还是OkHttp这类网络库请求数据,在拿到响应内容后,先做两步判断:

  • 判断响应内容是否为空或者空白字符串
  • 尝试解析JSON,捕获JSONException来识别非JSON格式的数据

2. 弹窗实现代码

可以用Android原生的AlertDialog来实现提示,示例代码如下(假设你在网络请求的回调里处理):

// 假设你已经拿到了网络请求返回的responseContent
if (TextUtils.isEmpty(responseContent)) {
    // 空数据提示
    showErrorDialog("提示", "暂无数据,请稍后重试");
} else {
    try {
        // 尝试解析JSON
        JSONObject jsonObject = new JSONObject(responseContent);
        // 解析成功,继续后续逻辑
    } catch (JSONException e) {
        Log.e(My_TAG, "非JSON格式数据", e);
        // 非JSON格式提示
        showErrorDialog("数据错误", "获取到的数据格式异常,请稍后重试");
    }
}

// 封装弹窗方法,方便复用
private void showErrorDialog(String title, String message) {
    new AlertDialog.Builder(this)
            .setTitle(title)
            .setMessage(message)
            .setPositiveButton("确定", (dialog, which) -> dialog.dismiss())
            .setCancelable(false)
            .show();
}

注意:记得导入androidx.appcompat.app.AlertDialog或者android.app.AlertDialog,根据你的项目依赖来选择。

二、将JSON数据传递到另一个Activity

已经实现了JSON读取逻辑后,传递数据有两种常用方式,根据你的需求选择:

方式1:直接传递JSON字符串

如果另一个Activity需要自己解析JSON,直接把JSON字符串通过Intent传递最直接:

// 在MainAct1中,拿到JSON字符串后
String jsonData = "你的JSON内容";
Intent intent = new Intent(MainAct1.this, TargetActivity.class);
intent.putExtra("KEY_JSON_DATA", jsonData);
startActivity(intent);

// 在TargetActivity中接收
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.target_layout);
    String receivedJson = getIntent().getStringExtra("KEY_JSON_DATA");
    if (!TextUtils.isEmpty(receivedJson)) {
        // 在这里解析JSON
        try {
            JSONObject jsonObject = new JSONObject(receivedJson);
            // 处理解析后的数据
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

方式2:传递解析后的序列化对象

如果已经把JSON解析成了Java对象,推荐把对象实现Parcelable接口后传递,这样更符合面向对象的开发方式:

  1. 先让你的数据类实现Parcelable:
public class DataModel implements Parcelable {
    private String name;
    private int age;

    // 构造方法、getter/setter
    // 实现Parcelable的必备方法
    protected DataModel(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    public static final Creator<DataModel> CREATOR = new Creator<DataModel>() {
        @Override
        public DataModel createFromParcel(Parcel in) {
            return new DataModel(in);
        }

        @Override
        public DataModel[] newArray(int size) {
            return new DataModel[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
    }
}
  1. 在MainAct1中传递对象:
// 解析JSON成DataModel对象
DataModel model = new DataModel();
// 给model赋值...

Intent intent = new Intent(MainAct1.this, TargetActivity.class);
intent.putExtra("KEY_DATA_MODEL", model);
startActivity(intent);
  1. 在TargetActivity中接收:
DataModel receivedModel = getIntent().getParcelableExtra("KEY_DATA_MODEL");
if (receivedModel != null) {
    // 使用model的数据
    String name = receivedModel.getName();
    int age = receivedModel.getAge();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:17:05