2016-12-02 3 views
-2

フラグメントから非アクティビティクラスにIを渡して、その文字列をJSONObjectに変換しようとしています。フラグメントから非アクティビティクラスへの文字列を取得してからJSONObjectに変換する

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder>{ 


Context context; 
JSONArray storeArray; 



SharedPreferences preferences = context.getSharedPreferences("storeList", Activity.MODE_PRIVATE); 
String storeList = preferences.getString("storeList", ""); 


System.out.println("storelist", storeList); 
storeArray = new JSONArray(storeList); 
JSONObject jObj = storeArray.getJSONObject(0); 
List<Movie>  mItems; 

    public CardAdapter() { 
     super(); 
     mItems = new ArrayList<Movie>(); 
     Movie movie = new Movie(); 
     movie.setName("this will come from the JSONObject"); 
     movie.setThumbnail(R.drawable.will come from JSONObject); 
     mItems.add(movie); 

    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View v = LayoutInflater.from(viewGroup.getContext()) 
       .inflate(R.layout.store_cardview, viewGroup, false); 
     ViewHolder viewHolder = new ViewHolder(v); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder viewHolder, int i) { 
     Movie movie = mItems.get(i); 
     viewHolder.tvMovie.setText(movie.getName()); 
     viewHolder.imgThumbnail.setImageResource(movie.getThumbnail()); 
    } 

    @Override 
    public int getItemCount() { 
     return mItems.size(); 
    } 

    class ViewHolder extends RecyclerView.ViewHolder{ 

     public ImageView imgThumbnail; 
     public TextView tvMovie; 

     public ViewHolder(View itemView) { 
      super(itemView); 
      imgThumbnail = (ImageView)itemView.findViewById(R.id.img_thumbnail); 
      tvMovie = (TextView)itemView.findViewById(R.id.tv_movie); 
     } 
    } 

}

私のフラグメントでは、私は私はこのような共有環境設定を取得しようとした株式の好み私の非アクティビティクラスで

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    final View rootView = inflater.inflate(R.layout.store_list, container, false); 

    //super.onCreate(); 
    VolleyGet.getInstance(getActivity()); 
    VolleyGet.getInstance().VolleyGET(domain, api, new CustomListener<String>(){ 
     @Override 
     public void getResult(String result){ 
      if (!result.isEmpty()) 
      { 
       Log.e("storelist---------->", result); 

       SharedPreferences sp1=getActivity().getSharedPreferences("storeList", Context.MODE_PRIVATE); 
       SharedPreferences.Editor editor = sp1.edit(); 
       editor.putString("storeList", result); 
       editor.commit(); 
      } 
     } 
    }); 

に私は必要な文字列を格納し

私はエラーが1になっていません。printlnを解決できません。2.不明なクラス:storelist 3.storearrayも不明です

助けてください、ありがとう!

+0

メソッドの外でprintlnを実行することはできません –

+0

アダプタで共有設定が本当に必要ですか?アダプタを作成する前にjson配列/オブジェクトを抽出できないのはなぜですか? –

+0

@ cricket_007私はそれを外部に取り出すことができますが、私はクラス内の共有プリファレンスを取得する方法を知りたい、ありがとう! – JerryKo

答えて

0

まず、System.out.printlnを実行するか、問題の範囲外で行った初期化されていないコンテキストにアクセスできません。

他のエラーについては、正しいコードを表示していないと思われますが、エラーが "storelist"と表示されている場合、変数は実際にはstoreListなので、タイプミスのようです。

RecyclerViewアダプタのチュートリアルを見ると、コンストラクタにはしばしばコンテキストが用意されています。これがSharedPreferencesにアクセスするために必要なものです。

public class CardAdapter extends 
    RecyclerView.Adapter<CardAdapter.ViewHolder> { 

    private JSONArray mArray; 
    private Context mContext; 
    private SharedPreferences mPrefs; 

    public CardAdapter(Context context) { 
     mContext = context; 
     mPrefs = context.getSharedPreferences("storeList", Activity.MODE_PRIVATE); 
     mArray = new JSONArray(mPrefs.getString("storeList", "[]")); 
    } 

} 
+0

あなたのコメントに関して_あなたは正確にブロックの外ではなくメソッド_の外でprintlnすることはできません;) – AxelH

+0

ええ、それで "あなたがやったところ" –

関連する問題