以下代码适用于我的设备,但我看到了生产中的崩溃。
我已将活动上下文传递到newInstance
我应该如何在PreferenceManager.getDefaultSharedPreferences()
使用上下文?
这在不同设备上的表现会有所不同吗? (相同的Android版本)
public class MyFragment extends Fragment {
...
private api myApi;
private Context context;
public static MyFragment newInstance(Context context, ...) {
MyFragment frag = new MyFragment();
frag.context = context;
return frag;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
api = new MyApi(this.context);
update();
}
private update() {
api.getData(new Callback<GenericMobileResponse<ArrayList<MyData>>>() {
@Override public success(GenericMobileResponse<ArrayList<MyData>> genericMobileResponse, Response response) {
ArrayList<MyData> data = genericMobileResponse.getData();
updateItems(data);
}
})
}
private updateItems(ArrayList<MyData>) {
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.context); //Crash! getContext()? this.context? getActivity()? getApplicationContext()
}
}
答案 0 :(得分:0)
试试这个:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
api = new MyApi(this.context);
update(this.context);// or just use inflater.getContext()
}
private update(final Context context) {
api.getData(new Callback<GenericMobileResponse<ArrayList<MyData>>>() {
@Override public success(GenericMobileResponse<ArrayList<MyData>> genericMobileResponse, Response response) {
ArrayList<MyData> data = genericMobileResponse.getData();
updateItems(context,data);
}
})
}
private updateItems(Context context, ArrayList<MyData>) {
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
}
答案 1 :(得分:0)
我为您的代码添加了一些修复程序。让我们看看会发生什么。
public class MyFragment extends Fragment {
...
private api myApi;
public static MyFragment newInstance(Context context, ...) {
MyFragment frag = new MyFragment();
return frag;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
api = new MyApi(getContext());
update();
}
private update() {
api.getData(new Callback<GenericMobileResponse<ArrayList<MyData>>>() {
@Override public success(GenericMobileResponse<ArrayList<MyData>> genericMobileResponse, Response response) {
ArrayList<MyData> data = genericMobileResponse.getData();
updateItems(data);
}
})
}
private updateItems(ArrayList<MyData>) {
// always use getContext() to retrieve the context.
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
}
}