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
相关产品推荐
相关产品推荐

