2017-03-01 58 views
0

下面的代码适用于我的设备,但是我看到了生产中的崩溃。 我将活动内容传递到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

试试这个:

@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); 
} 
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()); 
    } 
}