房间:无法开始 activity 将 ID 添加到意图
Room: Not able to start activity adding the ID to the intent
这是我的主activity。我有一个成员列表。我想点击一个客户并启动 MemberInfo 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) {
mMember = 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) {
Log.i("what", "gotpositionroger");
Member member = mMember.get(position);
Log.i("the", "aftergotpositionroger");
MemberInfo.open(this, member.getId());
}
}
这是我的会员信息activity。
public class MemberInfo extends AppCompatActivity {
public static void open(Activity activity, long memberid) {
Intent intent = new Intent(activity, MemberInfo.class);
intent.putExtra("MemberID", memberid);
activity.startActivity(intent);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_memberinfo);
-------------Log.i("okay", "memberinfo");---------------
Intent intent = getIntent();
if (intent != null && intent.hasExtra("MemberID")) {
long memberid = intent.getLongExtra("MemberID", -1);
// TODO: get customer details based on customer id
intent.putExtra("MemberID", memberid);
startActivity(intent);
}
else {
Toast.makeText(
getApplicationContext(),
R.string.empty_not_saved,
Toast.LENGTH_LONG).show();
}
}
}
问题是:当我点击一个成员时,它只是加载和加载,几秒钟后,应用程序崩溃了。
在我的会员信息 activity 中,我用 Log.i 标记了一行。当我单击某个成员时,logcat 一次又一次地向我显示相同的 Log.i - Log.i 会无限重复。
我的应用程序崩溃后,logcat 显示如下:
06-18 19:36:33.662 5041-5070/com.example.mainbuchhaltung
E/GraphicBuffer: unflatten: registerBuffer failed: Unknown error -2
(2)
06-18 19:36:33.662 5041-5070/com.example.mainbuchhaltung E/Surface:
dequeueBuffer: IGraphicBufferProducer::requestBuffer failed: 2
06-18 19:36:33.662 5041-5070/com.example.mainbuchhaltung
E/EGL_emulation: tid 5070: swapBuffers(550): error 0x300d
(EGL_BAD_SURFACE)
06-18 19:36:33.662 5041-5070/com.example.mainbuchhaltung
W/OpenGLRenderer: swapBuffers encountered EGL error 12301 on
0x942b8a20, halting rendering...
06-18 19:36:33.663 5041-5070/com.example.mainbuchhaltung
D/EGL_emulation: eglMakeCurrent: 0xa33983c0: ver 3 0 (tinfo
0xa322a560)
06-18 19:36:33.729 5041-5070/com.example.mainbuchhaltung
E/gralloc_ranchu: map_buffer: failed to map ashmem region!
gralloc_register_buffer(0x20a540): map failed: Out of memory
06-18 19:36:33.729 5041-5070/com.example.mainbuchhaltung
W/GraphicBufferMapper: importBuffer(0x20a4a0) failed: 2
06-18 19:36:33.729 5041-5070/com.example.mainbuchhaltung
E/GraphicBuffer: unflatten: registerBuffer failed: Unknown error -2
(2)
06-18 19:36:33.729 5041-5070/com.example.mainbuchhaltung E/Surface:
dequeueBuffer: IGraphicBufferProducer::requestBuffer failed: 2
06-18 19:36:33.729 5041-5070/com.example.mainbuchhaltung
E/EGL_emulation: tid 5070: init(382): error 0x3003 (EGL_BAD_ALLOC)
tid 5070: eglCreateWindowSurface(922): error 0x3003 (EGL_BAD_ALLOC)
06-18 19:36:33.732 5041-5070/com.example.mainbuchhaltung
A/OpenGLRenderer: Failed to create EGLSurface for window 0xbf1d4008,
eglErr = EGL_BAD_ALLOC
06-18 19:36:33.733 5041-5070/com.example.mainbuchhaltung A/libc: Fatal
signal 6 (SIGABRT), code -6 in tid 5070 (RenderThread)
我认为问题出在 MemberInfo 代码中,但我无法找出错误所在。谁能帮我解决这个问题?
您正在使用 MemberInfo activity onCreate
方法中的 "empty" 意图打开 activity:
Intent intent = getIntent();
if (intent != null && intent.hasExtra("MemberID")) {
long memberid = intent.getLongExtra("MemberID", -1);
// TODO: get customer details based on customer id
intent.putExtra("MemberID", memberid);
startActivity(intent);
}
else {
Toast.makeText(
getApplicationContext(),
R.string.empty_not_saved,
Toast.LENGTH_LONG).show();
}
从 onCreate 中删除它:
intent.putExtra("MemberID", memberid);
startActivity(intent);
启动会员信息后activity您需要做的就是将会员 ID 作为额外传递:
long memberid = intent.getLongExtra("MemberID", -1);
当成员点击时,您没有呼叫 activity
public void onMemberClick(int position) {
Log.i("what", "gotpositionroger");
Member member = mMember.get(position);
Log.i("the", "aftergotpositionroger");
Intent intent=new Intent(getApplicationContext(),MemberInfo.class);
intent.putExtra("id",member.getId());
startActivity(intent);
}
在 Meminfoactivity 中你应该这样做
Intent intent = getIntent();
if (intent != null && intent.hasExtra("MemberID")) {
long memberid = intent.getLongExtra("MemberID", -1);
// intent.putExtra("MemberID", memberid);
//you cant able to start the activity without new Intent(thid,Example.class)
// startActivity(intent);
}
else {
Toast.makeText(
getApplicationContext(),
R.string.empty_not_saved,
Toast.LENGTH_LONG).show();
}
这是我的主activity。我有一个成员列表。我想点击一个客户并启动 MemberInfo 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) {
mMember = 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) {
Log.i("what", "gotpositionroger");
Member member = mMember.get(position);
Log.i("the", "aftergotpositionroger");
MemberInfo.open(this, member.getId());
}
}
这是我的会员信息activity。
public class MemberInfo extends AppCompatActivity {
public static void open(Activity activity, long memberid) {
Intent intent = new Intent(activity, MemberInfo.class);
intent.putExtra("MemberID", memberid);
activity.startActivity(intent);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_memberinfo);
-------------Log.i("okay", "memberinfo");---------------
Intent intent = getIntent();
if (intent != null && intent.hasExtra("MemberID")) {
long memberid = intent.getLongExtra("MemberID", -1);
// TODO: get customer details based on customer id
intent.putExtra("MemberID", memberid);
startActivity(intent);
}
else {
Toast.makeText(
getApplicationContext(),
R.string.empty_not_saved,
Toast.LENGTH_LONG).show();
}
}
}
问题是:当我点击一个成员时,它只是加载和加载,几秒钟后,应用程序崩溃了。
在我的会员信息 activity 中,我用 Log.i 标记了一行。当我单击某个成员时,logcat 一次又一次地向我显示相同的 Log.i - Log.i 会无限重复。
我的应用程序崩溃后,logcat 显示如下:
06-18 19:36:33.662 5041-5070/com.example.mainbuchhaltung E/GraphicBuffer: unflatten: registerBuffer failed: Unknown error -2 (2)
06-18 19:36:33.662 5041-5070/com.example.mainbuchhaltung E/Surface: dequeueBuffer: IGraphicBufferProducer::requestBuffer failed: 2
06-18 19:36:33.662 5041-5070/com.example.mainbuchhaltung E/EGL_emulation: tid 5070: swapBuffers(550): error 0x300d (EGL_BAD_SURFACE)
06-18 19:36:33.662 5041-5070/com.example.mainbuchhaltung W/OpenGLRenderer: swapBuffers encountered EGL error 12301 on 0x942b8a20, halting rendering...
06-18 19:36:33.663 5041-5070/com.example.mainbuchhaltung D/EGL_emulation: eglMakeCurrent: 0xa33983c0: ver 3 0 (tinfo 0xa322a560)
06-18 19:36:33.729 5041-5070/com.example.mainbuchhaltung E/gralloc_ranchu: map_buffer: failed to map ashmem region! gralloc_register_buffer(0x20a540): map failed: Out of memory
06-18 19:36:33.729 5041-5070/com.example.mainbuchhaltung W/GraphicBufferMapper: importBuffer(0x20a4a0) failed: 2
06-18 19:36:33.729 5041-5070/com.example.mainbuchhaltung E/GraphicBuffer: unflatten: registerBuffer failed: Unknown error -2 (2)
06-18 19:36:33.729 5041-5070/com.example.mainbuchhaltung E/Surface: dequeueBuffer: IGraphicBufferProducer::requestBuffer failed: 2
06-18 19:36:33.729 5041-5070/com.example.mainbuchhaltung E/EGL_emulation: tid 5070: init(382): error 0x3003 (EGL_BAD_ALLOC) tid 5070: eglCreateWindowSurface(922): error 0x3003 (EGL_BAD_ALLOC)
06-18 19:36:33.732 5041-5070/com.example.mainbuchhaltung A/OpenGLRenderer: Failed to create EGLSurface for window 0xbf1d4008, eglErr = EGL_BAD_ALLOC
06-18 19:36:33.733 5041-5070/com.example.mainbuchhaltung A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 5070 (RenderThread)
我认为问题出在 MemberInfo 代码中,但我无法找出错误所在。谁能帮我解决这个问题?
您正在使用 MemberInfo activity onCreate
方法中的 "empty" 意图打开 activity:
Intent intent = getIntent();
if (intent != null && intent.hasExtra("MemberID")) {
long memberid = intent.getLongExtra("MemberID", -1);
// TODO: get customer details based on customer id
intent.putExtra("MemberID", memberid);
startActivity(intent);
}
else {
Toast.makeText(
getApplicationContext(),
R.string.empty_not_saved,
Toast.LENGTH_LONG).show();
}
从 onCreate 中删除它:
intent.putExtra("MemberID", memberid);
startActivity(intent);
启动会员信息后activity您需要做的就是将会员 ID 作为额外传递:
long memberid = intent.getLongExtra("MemberID", -1);
当成员点击时,您没有呼叫 activity
public void onMemberClick(int position) {
Log.i("what", "gotpositionroger");
Member member = mMember.get(position);
Log.i("the", "aftergotpositionroger");
Intent intent=new Intent(getApplicationContext(),MemberInfo.class);
intent.putExtra("id",member.getId());
startActivity(intent);
}
在 Meminfoactivity 中你应该这样做
Intent intent = getIntent();
if (intent != null && intent.hasExtra("MemberID")) {
long memberid = intent.getLongExtra("MemberID", -1);
// intent.putExtra("MemberID", memberid);
//you cant able to start the activity without new Intent(thid,Example.class)
// startActivity(intent);
}
else {
Toast.makeText(
getApplicationContext(),
R.string.empty_not_saved,
Toast.LENGTH_LONG).show();
}