项目场景:
最近在写云平台数据获取的项目,当我登陆的时候需要一直携带着登陆成功后返回的Cookie值,才能保证后面的接口访问的时候通畅无阻,这就需要将Cookie值在不同的Activity之间传递或者是传递给Fragment
问题描述
在Activity之间进行传递的时候,使用的是接口传递数据传递数据的方法,但是在Fragment中的时候,一旦进入线程中就会报null,空指针异常;开始想法是使用静态代码块的方式进行判空操作(*但是我的Fragment使用了ViewPager+Fragment+BottomNavgationView实现底部导航栏),于是使用多态的方法进行修改,emmmm还是不可以为空为空!!
解决方案:
这里我使用了Intent传递数据、SharedPreferences轻量级的存储方式进行数据的传递
1、Intent传递数据
通过Intent的putExtra()方法传递数据,另一个活动可以通过getExtra()方法接收数据。
注意:这里是从 SecondFragment 向 ActivitySensorPage 传递数据
(1)在SecondFragment中
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MessageBean messageBean = messageBeanList.get(position);
Toast.makeText(getActivity(), messageBean.getName(), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getActivity(), ActivitySensorPage.class);
intent.putExtra("uid", messageBean.getUid());
intent.putExtra("token", messageBean.getToken());
Toast.makeText(getActivity(), Data_uid + Data_token, Toast.LENGTH_SHORT).show();
startActivity(intent);
}
});
(2)在ActivitySensorPage中
String Data_uid = null,Data_token = null;
Intent intent = getIntent();
Data_uid = intent.getStringExtra("uid");
Data_token = intent.getStringExtra("token");
System.out.println("ActivitySensorPage中接收到的数据 = " + Data_uid + " 和 " + Data_token);
2、SharedPreferences传递数据
SharedPreferences是Android中一种轻量级的存储方式,可以用于存储应用程序的配置文件和一些简单的数据。
注意:这里是ActivityLoginPage向SecondFragment传递数据
(1)在ActivityLoginPage中
SharedPreferences.Editor editor = ActivityLoginPage.this.getSharedPreferences("DATA", Context.MODE_PRIVATE).edit();
editor.putString("DATA", GetCookie);
editor.apply();
(2)在SecondFragment中
SharedPreferences sharedPreferences = getActivity().getSharedPreferences("DATA", MODE_PRIVATE);
data = sharedPreferences.getString("DATA", "");
注意:在用Fragment获取Activity中的数据时会出现可能为空指针的提醒!!!我们需要在 onAttach() 方法中获取 Activity 中的数据并赋值给成员变量,然后在需要使用 getActivity() 的地方使用该成员变量;这里参考链接https://www.cnblogs.com/tingtasia/p/11545014.html