【问题标题】:Get string from fragment to non-activity class then convert to JSONObject从片段获取字符串到非活动类,然后转换为 JSONObject
【发布时间】:2016-12-02 03:04:23
【问题描述】:

我正在尝试将 I 从片段传递到非活动类并将字符串转换为 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 resolve symbol println 2.Unknown class:storelist 3.storearray is also unknown

请帮忙,谢谢!

【问题讨论】:

  • 你不能只在方法之外 println
  • 您真的需要适配器中的共享首选项吗?为什么不能在创建适配器之前提取json数组/对象?
  • @cricket_007 我可以在外面提取它,但我还是想知道如何获取课堂上的共享偏好,谢谢!
  • 1) 请显示该类的构造函数。目前,您的 context 值为 null,因此不应运行此代码(如果它确实编译了)。 2) 我不知道Unknown class:storelist 引用了什么错误,因为你声明storeList 就好了
  • @cricket_007 1) 我已经编辑了课程 2) 我不知道为什么我的 storeList 不起作用

标签: java android android-fragments sharedpreferences


【解决方案1】:

首先,您不能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", "[]"));
    }

}

【讨论】:

  • 关于您的评论您不能只在方法之外进行 println 准确地说,不能在块之外;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
相关资源
最近更新 更多