gpt4 book ai didi

java - Android Studio : NullPointerException when trying to click on a object in a list and start a new activity

转载 作者:行者123 更新时间:2023-12-02 02:05:37 25 4
gpt4 key购买 nike

我有一个 Room 数据库,其中包含成员列表。列表中有不同的成员。我想单击某个特定成员,然后它应该启动一个新 Activity ,我可以在其中查看有关该成员的其他信息。但是当我点击某个成员时,应用程序崩溃了。

我的适配器代码:

public class MemberListAdapter extends RecyclerView.Adapter<MemberListAdapter.MemberViewHolder> {

private List<Member> mMember;
private MemberClickListener listener;


public interface MemberClickListener {
void onMemberClick(int position);
}

public MemberListAdapter(final MemberClickListener listener) {
this.listener = listener;
}


@Override
public MemberViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_member, parent, false);
return new MemberViewHolder(itemView, listener);
}


void setMember(List<Member> members) {
mMember = members;
notifyDataSetChanged();
}

@Override
public int getItemCount() {
if (mMember != null)
return mMember.size();
else return 0;
}


@Override
public void onBindViewHolder(MemberViewHolder holder, int position) {
holder.bind(mMember.get(position), listener);
}

class MemberViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

private final MemberClickListener listener;
private final TextView firstname;
private final TextView surname;
private final TextView balance;

MemberViewHolder(View itemView, MemberClickListener listener) {
super(itemView);
firstname = itemView.findViewById(R.id.layout_firstname);
surname = itemView.findViewById(R.id.layout_surname);
balance = itemView.findViewById(R.id.layout_balance);
this.listener = listener;

itemView.setOnClickListener(this);
}


public void bind(final Member member, final MemberClickListener listener) {
firstname.setText(member.getFirstname());
surname.setText(member.getSurname());
//balance.setText(toString(member.getBalance()));

itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("test1", "beforelistenercheck");
if (listener != null) {
Log.i("test2", "duringlistenercheck");
listener.onMemberClick(getAdapterPosition());
Log.i("test3", "aftergettingposition");
}
}
});
}

public void onClick(View v) {
if (listener != null) {
********listener.onMemberClick(getAdapterPosition());********
}
}
}
}

我的主要 Activity 代码:

public class MemberMainActivity extends AppCompatActivity implements MemberListAdapter.MemberClickListener{

private MemberViewModel mMemberViewModel;
private List<Member> mMember;

void setMember(List<Member> members) {
mMember = members;
}

public static final int NEW_MEMBER_ACTIVITY_REQUEST_CODE = 1;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_member);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MemberMainActivity.this, NewMemberActivity.class);
startActivityForResult(intent, NEW_MEMBER_ACTIVITY_REQUEST_CODE);
}
});

RecyclerView recyclerView = findViewById(R.id.recyclerviewcard_member);
final MemberListAdapter adapter = new MemberListAdapter(this);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));

mMemberViewModel = ViewModelProviders.of(this).get(MemberViewModel.class);

mMemberViewModel.getAllMember().observe(this, new Observer<List<Member>>() {
@Override
public void onChanged(@Nullable final List<Member> members) {
// Update the cached copy of the words in the adapter.
adapter.setMember(members);
}
});
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == NEW_MEMBER_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
Member member = new Member(data.getStringExtra(NewMemberActivity.EXTRA_REPLY), data.getStringExtra(NewMemberActivity.EXTRA_REPLY2));
mMemberViewModel.insert(member);
} else {
Toast.makeText(
getApplicationContext(),
R.string.empty_not_saved,
Toast.LENGTH_LONG).show();
}
}


public void onMemberClick(int position) {
**********Member member = mMember.get(position);**********
MemberInfo.open(this, member.getId());
}
}

点击成员(member)后应启动的 Activity 代码:

public class MemberInfo extends AppCompatActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_memberinfo);

Intent intent = getIntent();
if (intent != null && intent.hasExtra("MemberID")) {
long memberid = intent.getLongExtra("MemberID", -1);
// TODO: get customer details based on customer id
Bundle bundle = new Bundle();
bundle.putLong("MemberID", memberid);
intent.putExtras(bundle);
startActivity(intent);
}
else {
Toast.makeText(
getApplicationContext(),
R.string.empty_not_saved,
Toast.LENGTH_LONG).show();
}
}

public static void open(Activity activity, long memberid) {
Intent intent = new Intent(activity, MemberInfo.class);
intent.putExtra("MemberID", memberid);
activity.startActivity(intent);
}
}

错误:

logcat: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
at com.example.ahash.mainbuchhaltung.Member.MemberMainActivity.onMemberClick(MemberMainActivity.java:81)
at com.example.ahash.mainbuchhaltung.Member.MemberListAdapter$MemberViewHolder$1.onClick(MemberListAdapter.java:86)
at android.view.View.performClick(View.java:6256)
at android.view.View$PerformClick.run(View.java:24701)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

我用星号标记了错误所在的行。我还尝试通过以下问题的答案来解决我的问题:What is a NullPointerException, and how do I fix it?

我的适配器代码中有三个不同的日志,名为“test1”、“test2”和“test3”。我模拟了我的应用程序,“test1”和“test2”显示在我的 logcat 中,但“test3”未显示。

我已经为此工作了三个星期,但我仍然遇到与以前相同的问题。谁能帮我解决这个问题吗?

最佳答案

您的 mMember 在 onMemberClick 方法中为 null。

关于java - Android Studio : NullPointerException when trying to click on a object in a list and start a new activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50845552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com