2017-03-01 6 views
0

以下のコードはデバイス上で動作しますが、本番環境ではクラッシュしています。 アクティビティのコンテキストを渡していますnewInstanceコールバック内のフラグメントコンテキスト

PreferenceManager.getDefaultSharedPreferences()でのコンテキストの使用方法を教えてください。

これは、デバイスによって異なる動作をしますか? (同じアンドロイド版)

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()); 
    } 
} 
関連する問題