2016-12-02 54 views
-2

我想将片段I传递给非活动类并将字符串转换为JSONObject。获取字符串从片段到非活动类,然后转换为JSONObject

在我的片段我存储的字符串,我需要在一个共享偏好

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

在我的非活性类我试图获取共享的偏好是这样的:

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

}

我在1.cannot解决符号println错误2.Unknown类: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

关于你的评论_你不能只在print_n之外的方法_不在块之外,以确切地;) – AxelH

+0

是的,因此“你已经做了它” –

相关问题