В первом упражнении для загрузки в мое приложение я положил JSONArray
в Sharedpreferences
(как String
):
//put myJsonArray into shared preferences file as a String
//Convert back to Json later, in the adapter
SharedPreferences sharedPrefs = getSharedPreferences("MyData", Context.MODE_PRIVATE);
//we want to edit SharedPreferences
SharedPreferences.Editor editor = sharedPrefs.edit();
//put the string value into SharedPreferences, with the key "key_value"
editor.putString("key_value", myJsonArray.toString());
//commit the string
editor.commit();
Я могу получить это string
в другом Activity
и преобразовать его обратно в JSONArray
легко с помощью:
SharedPreferences sharedPrefs = getSharedPreferences("MyData", Context.MODE_PRIVATE);
String json_array = sharedPrefs.getString("key_value", "0");
try
{
JSONArray jsonArray = new JSONArray(json_array);
} catch (JSONException e) {
Log.e("MYAPP", "unexpected JSON exception", e);
}
Но когда я помещаю вышеуказанный код в onBindViewHolder
моего adapter
или где-либо еще в моем adapter
, я получаю: NullPointerException
, и мое приложение вылетает.
Пожалуйста, скажите мне, как я могу решить эту проблему.
Там, где он падает, написано:
java.lang.NullPointerException at com.example.chris.tutorialspoint.SharedReviews.SharedPopulistoReviewsAdapter.onBindViewHolder(SharedPopulistoReviewsAdapter.java:130)
Мой onBindViewHolder
код:
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int position) {
SharedReview r = the_Shared_reviews.get(position);
SharedPreferences sharedPrefs = context.getSharedPreferences("MyData", Context.MODE_PRIVATE);
String json_array = sharedPrefs.getString("key_value", "0");
try
{
JSONArray jsonArray = new JSONArray(json_array);
System.out.println("SharedAdapter, the jsonarray is :" + jsonArray);
} catch (JSONException e) {
Log.e("MYAPP", "unexpected JSON exception", e);
}
((ReviewHolder) viewHolder).category.setText("Category: " + r.getCategory());
((ReviewHolder) viewHolder).name.setText("Name: " + r.getName());
((ReviewHolder) viewHolder).phone.setText("Phone: " + r.getPhone());
((ReviewHolder) viewHolder).comment.setText("Your Comment: " + r.getComment());
//set an onClick listener for the row, if it's clicked anywhere
((ReviewHolder) viewHolder).itemView.setOnClickListener(new View.OnClickListener() {
@Override
//When the review is clicked in PopulistoListView
//then show that review
public void onClick(View v) {
SharedReview sharedReview = (SharedReview) SharedPopulistoReviewsAdapter.getItem(position);
//we want to pass the review_id of the sharedReview being clicked
//to the ViewContact activity, and from there post it and get more
//info for that sharedReview - address, comments etc
Intent i = new Intent(v.getContext(), ViewContact.class);
//pass the review_id to ViewContact class
i.putExtra("review_id", sharedReview.getReviewid());
v.getContext().startActivity(i);
}
});
}
Line 130
:
SharedPreferences sharedPrefs = context.getSharedPreferences("MyData", Context.MODE_PRIVATE);