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

Android中如何将数据从Activity传递到普通Java类

现有实现的问题
  • 错误使用startActivity()启动非Activity组件:startActivity()方法只能用于启动Android系统的Activity组件,你的BaseURL是普通自定义Java类,无法通过Intent启动,运行会直接抛出ActivityNotFoundException异常。
  • Intent未携带对应参数:你在构造Intent时没有调用putExtra()方法传入work_link的值,就算BaseURL是Activity也无法拿到对应数据。
  • 普通Java类无getIntent()方法:getIntent()是Activity子类才有的系统方法,自定义Java类中无法直接调用该方法,代码编译阶段就会报错。
  • 参数key不匹配:即使前面的问题都解决,你要取的key是"worklink",但你并没有以该key存入Intent,参数取值会返回null。
  • 冗余逻辑:你已经把值存入了SharedPreferences,完全不需要再用Intent给普通类传值,二者逻辑冲突。
正确的传值实现方案

这里分两种常用场景适配:

场景1:临时给BaseURL实例传值(无持久化需求时推荐)

直接通过构造方法、Setter方法传值即可,不需要用到Intent或者SharedPreferences:

第一步:修改BaseURL类代码

public class BaseURL {
    private String workLink;
    // 构造方法传参
    public BaseURL(String workLink) {
        this.workLink = workLink;
    }
    // 可选:添加Setter方法灵活修改值
    public void setWorkLink(String workLink) {
        this.workLink = workLink;
    }
    public String getWorkLink() {
        return workLink;
    }
}

第二步:修改Activity中调用代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_workspace);

    worklink = findViewById(R.id.workspace);
    button = findViewById(R.id.continu);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String work_link = worklink.getText().toString().trim();
            // 直接实例化BaseURL传值即可
            BaseURL baseURL = new BaseURL(work_link);
            // 后续直接使用baseURL实例即可
        }
    }); 
}

场景2:需要全局持久化存储BaseURL的值(APP重启后仍需使用)

直接用你已经写的SharedPreferences取值即可,不需要Intent:

修改BaseURL类代码

import android.content.Context;
import android.content.SharedPreferences;

public class BaseURL {
    public String getWorkLink(Context context) {
        SharedPreferences sharedPref = context.getSharedPreferences("myKey", Context.MODE_PRIVATE);
        return sharedPref.getString("value", ""); // 第二个参数为取值失败时的默认返回值
    }
}

调用时传入Context即可

BaseURL baseURL = new BaseURL();
String link = baseURL.getWorkLink(WorkspaceActivity.this);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:54:04