我正在尝试从fragment
调用dialogfragment
函数。我的应用程序基于navigation drawer
,其中包含fragments
的容器。在我的fragments
之一中,我提出了retrofit
请求,也可以从此dialogfragment
打开fragment
。但是我面临一个非常严重的问题-从SharedPreferences
调用片段函数后,我无法得到dialogFragment
。在这里,我怎么称呼这个方法:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
JobList jobList = new JobList();
jobList.testFunction();
}
});
这是我的testFunction()
:
public void testFunction() {
sp = Objects.requireNonNull(getActivity()).getSharedPreferences("app_data", 0);
Log.w("MY_tag", sp.getString("access_token", ""));
}
我的testFunction仅包含实验日志,因为我尝试从sharedpreferences中获取数据,但仅收到错误:
java.lang.NullPointerException
放置断点后,我了解到我无法获得任何用于获取sharedPreferences的上下文。我不明白如何解决我的问题,如果smb帮助我解决问题,我会很高兴。
答案 0 :(得分:1)
请尝试如下
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
JobList jobList = new JobList();
jobList.testFunction(view);
}
});
public void testFunction(View view) {
sp = Objects.requireNonNull(view.getContext()).getSharedPreferences("app_data", 0);
Log.w("MY_tag", sp.getString("access_token", ""));
}
答案 1 :(得分:1)
简单推荐的方法:
首先在片段中进行回调:如何?
interface DialogCallBack{
void callback(View view);
}
片段上的实现接口,当为dialogfragment创建构造函数时,只需传递该片段的回调即可。
然后在您的对话框中片段:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
listener.callback(view);
}
});
在片段上实现的listener调用接口方法。在片段中执行以下操作:
@override
callback(View view){
testFunction(view);
}