У меня есть другая проблема или ошибка в приложении для Android. Извините, что я новичок в разработке Android, но это моя страсть, и я буду упорствовать.Обновить recyclerview при нажатии кнопки
В любом случае, мой код разбивается на вызов метода в моем классе CustomAdapter.
Это мой CustomAdapter класс, где происходит сбой:
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.CustomViewHolder> {
private ArrayList<UserInfo> arrayList = new ArrayList<UserInfo>();
float ratings;
public CustomAdapter(ArrayList<UserInfo> arrayList){
this.arrayList = arrayList;
}
@Override
public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.userslayout, parent, false);
CustomViewHolder customViewHolder = new CustomViewHolder(view);
return customViewHolder;
}
@Override
public void onBindViewHolder(final RecyclerViewHolder holder, int position) {
final UserInfo userInfo = arrayList.get(position);
holder.username.setText(userInfo.getMusicName());
holder.forename.setText(userInfo.getMusicCategory());
holder.surname.setText(userInfo.getFileType());
// THE APP CRASHES WHEN I CLICK THIS BUTTON. THINGS UPDATE IN THE
// DATABASE - BUT THE RECYCLERVIEW CRASHES AND THE APP CRASHES
holder.buttonRefresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String pressed = Integer.toString(userInfo.getPressedName());
UserListRecycler userListRecycler = new UserListRecycler();
UserListRecycler.UserPressedAsync userPressedAsync = userListRecycler.new UserPressedAsync();
userPressedAsync.execute(username, pressed);
}
});
}
}
Это мой UserListRecycler
класс - основной класс, а внутренний класс UserPressedAsync
public class UserListRecycler extends Fragment {
RecyclerView recyclerView;
static UserAdapter adapter;
RecyclerView.LayoutManager layoutManager;
ArrayList<UserInfo> list;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.userlistGUI, container, false);
recyclerView = (RecyclerView) rootView.findViewById(R.id.reUsers);
recyclerView.setHasFixedSize(true);
list = new ArrayList<UserInfo>();
// Instantiate new adapter here
adapter = new MusicRecyclerAdapter(list);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
// Sets the adapter here
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
return rootView;
}
@Override
public void onStart() {
super.onStart();
populateRecyclerList();
}
public void populateList(){
PopulateUsers userList = new PopulateUsers(list, adapter, recyclerView);
userList.execute();
}
public class UserPressedAsync extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
// REST STUFF HAPPENS HERE
}
@Override
protected void onPostExecute(String postData) {
// CRASHES HERE!!!
populateRecyclerList();
}
}
}
Это мой класс PopulateUsers
- где данные с моего сервера извлекаются через REST
public class PopulateUsers extends AsyncTask<String, String, String> {
static ArrayList<UserInfo> list;
UserAdapter adapter;
RecyclerView recyclerView;
public PopulateUsers(ArrayList<UserInfo> list, UserAdapter adapter, RecyclerView recyclerView) {
this.list = new ArrayList<UserInfo>();
this.adapter = new UserAdapter();
this.list = list;
this.adapter = adapter;
this.recyclerView = recyclerView;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
// `REST` Activity happens here
}
@Override
protected void onPostExecute(String s) {
try {
list.clear();
JSONArray jsonArray = new JSONArray(s);
for (int i = 0; i < jsonArray.length(); i++) {
String forename = jsonArray.getJSONObject(i).getString("forename");
String surname = jsonArray.getJSONObject(i).getString("surname");
String nationality = jsonArray.getJSONObject(i).getString("nationality");
UserInfo userInfo = new UserInfo(forename, surname, nationality);
list.add(userInfo);
}
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
В основном, когда нажимается кнопка вещи обновляются в backend
, т.е. phpmyadmin
mysql
сервер - но приложение не обновляется с обновленным списком, как он выходит из строя. Это что-то сделать с помощью метода populateList()
в моем UserListRecycler
классе, он указывает на ошибку в recyclerView.setAdapter(adapter);
в PopulateUsers
классе - именно в onPostExecute()
, как NullPointerException
, но он отлично работает, когда UserListRecycler
класс первый экземпляр и загружен. Так почему он падает, когда я вызываю метод populateList()
?
Это моя трассировка стеки:
java.lang.NullPointerException
at lukasz.usersapp.PopulateUsers.onPostExecute(PopulateUsers.java:67)
at lukasz.usersapp.PopulateUsers.onPostExecute(PopulateUsers.java:27)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Это действительно много значит, на самом деле отсыпаться для себя, если кто-то может помочь мне решить эту проблему. Это ужасная ошибка!
Так как я могу исправить эту ужасную ошибку, пожалуйста? Я буквально не могу спать, и я продолжаю стучать головой о стену. –
Есть ли способ, которым вы можете исправить мой код? Наверняка, он двигает линию здесь и там –
, откуда приходит ваш json? Из api? – hehe