android - 单击对话框按钮出现空点异常错误

标签 android list android-recyclerview dialog

我正在处理我想通过单击对话框按钮打开 Activity 的应用程序。层次结构是当单击 List_data 时应打开一个对话框,然后单击对话框按钮它会打开一个新 Activity 。

当我单击对话框中的按钮时,对话框完美打开按钮导致应用程序崩溃并出现空指针异常。

这是我的 List_Activity,其中数据显示在列表中,它工作正常。

public class UsersListActivity extends AppCompatActivity implements ItemClickListenerLongPressed{

AppCompatActivity activity = UsersListActivity.this;

AppCompatTextView textViewName;
RecyclerView mRecyclerView;
AppCompatButton textViewButtonNewUser;
UserRecyclerAdapterSavedUsers userRecyclerAdapterSavedUsers;
List<User> listUsers;

DatabaseHelper databaseHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user_record_updated_list);

    mRecyclerView= (RecyclerView) findViewById(R.id.recyclerViewUsers);
    mRecyclerView.setAdapter(userRecyclerAdapterSavedUsers);
    //userRecyclerAdapterSavedUsers.setItemClickListenerLongPressed(this);

    initViews();
    initObjects();
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    startActivity(new Intent(UsersListActivity.this,AdminMain.class));
    finish();
}

@Override
protected void onRestart() {
    super.onRestart();
}


/**
 * This method is to initialize views
 */
private void initViews() {
    textViewName = (AppCompatTextView) findViewById(R.id.textViewName);
    textViewButtonNewUser = (AppCompatButton) findViewById(R.id.btnaddnew);
    mRecyclerView = (RecyclerView) findViewById(R.id.recyclerViewUsers);
    textViewButtonNewUser.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(UsersListActivity.this,UserRecordSaveActivity.class));
        }
    });

}

/**
 * This method is to initialize objects to be used
 */
private void initObjects() {
    listUsers = new ArrayList<>();
    userRecyclerAdapterSavedUsers = new UserRecyclerAdapterSavedUsers(listUsers);

    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setItemAnimator(new DefaultItemAnimator());
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setAdapter(userRecyclerAdapterSavedUsers);
    databaseHelper = new DatabaseHelper(activity);

    String emailFromIntent = getIntent().getStringExtra("USERS");
    textViewName.setText(emailFromIntent);

    getDataFromSQLite();
}

/**
 * This method is to fetch all user records from SQLite
 */
private void getDataFromSQLite() {
    // AsyncTask is used that SQLite operation not blocks the UI Thread.
    new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... params) {
            listUsers.clear();
            listUsers.addAll(databaseHelper.getAllUser());

            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            userRecyclerAdapterSavedUsers.notifyDataSetChanged();
        }
    }.execute();
}

@Override
public void onClick(View view, int position) {

}

这是我实现对话框的适配器类

public class UserRecyclerAdapterSavedUsers extends RecyclerView.Adapter<UserRecyclerAdapterSavedUsers.UserViewHolder> {

private List<User> listUsers;
Context mContext;
ItemClickListenerLongPressed itemClickListenerLongPressed;
View itemView;

public UserRecyclerAdapterSavedUsers(List<User> listUsers) {
    this.listUsers = listUsers;
}


@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item_user_recycler_second, parent, false);

    return new UserViewHolder(itemView);
}


@Override
public void onBindViewHolder(UserViewHolder holder, int position) {

    holder.textViewID.setText(listUsers.get(position).getUserid());
    holder.textViewName.setText(listUsers.get(position).getName());
    holder.textViewPassword.setText(listUsers.get(position).getPassword());
    holder.textViewRole.setText(listUsers.get(position).getRole());

}

public void setItemClickListenerLongPressed(ItemClickListenerLongPressed itemClickListenerLongPressed) {
    this.itemClickListenerLongPressed = itemClickListenerLongPressed;
}

@Override
public int getItemCount() {
    Log.v(UsersRecyclerAdapter.class.getSimpleName(),""+listUsers.size());
    return listUsers.size();
}

private void displayingAlertDialog() {
    final User user= new User();
    //displaying alert dialog box
    AlertDialog.Builder builder = new AlertDialog.Builder(itemView.getContext());
    builder.setTitle("Choose Option");
    builder.setMessage("Update or Delete?");
    builder.setPositiveButton("Update", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

            //go to update activity
            gotoupdateuserActivity(user.getUserid());
           // dialog.cancel();

        }
    });
    builder.setNeutralButton("Delete", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

            //go to update activity
            dialog.cancel();

        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });
    AlertDialog alert11 = builder.create();
    alert11.show();
}

private void gotoupdateuserActivity(String userid) {
    Intent goToUpdate = new Intent(mContext, SplashActivity.class);
    goToUpdate.putExtra("USER_ID", userid);
    mContext.startActivity(goToUpdate);
}

/**
 * ViewHolder class
 */
public class UserViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    //public AppCompatTextView ID;
    public AppCompatTextView textViewID;
    public AppCompatTextView textViewName;
    public AppCompatTextView textViewPassword;
    public AppCompatTextView textViewRole;
    LinearLayout layout;

    public UserViewHolder(View view) {
        super(view);

        textViewID = (AppCompatTextView) view.findViewById(R.id.textViewID);
        textViewName = (AppCompatTextView) view.findViewById(R.id.textViewName);
        textViewPassword = (AppCompatTextView) view.findViewById(R.id.textViewPassword);
        textViewRole = (AppCompatTextView) view.findViewById(R.id.textViewRole);
        layout = (LinearLayout) view.findViewById(R.id.list_view);

        layout.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        displayingAlertDialog();
    }
}

这是错误图片

Error Image

最佳答案

你正在传递上下文而不初始化它

Context mContext;


public UserRecyclerAdapterSavedUsers(List<User> listUsers) {
    this.listUsers = listUsers;
}


@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item_user_recycler_second, parent, false);

       mContext = parent.getContext() //INITIALISE CONTEXT

    return new UserViewHolder(itemView);
}

关于android - 单击对话框按钮出现空点异常错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54720855/

相关文章:

java - 如何去除中心点下方的阴影?

Android:如何使用 Volley 从方法返回异步 JSONObject?

android - 如何在 viewpager 中重新创建 fragment

android - 共享元素转换不起作用 - 我无法解析方法 ActivityOptionsCompat.makeSceneTransitionAnimation(mContext, p1, p2);

java - Recycleview 没有出现在 Fragment 中

android - 最大化 AlertDialog?

c# - 这样的集合是否存在(Dictionary 和 HashSet 的功能)?

javascript - 循环遍历数组并打印特定范围的值?

java - JPA的getResultList()返回哪种类型的列表

java - Android recyclerview 向上滚动时加载更多数据