本文介绍了控制返回]按钮"在机器人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从子活动的文本数据值回。而且一切正常。但小组活动被打开的时候,然后我就点击后退按钮在电话里,它抛出一个异常错误。我发现在Android的记事本生命周期控制toturial但是这是很难理解的。有人可以帮我吗?这是我的code:

 公共类SBooks扩展ListActivity {
私人字符串title_raw;
私人SBooksDbAdapter mDbHelper;
私有静态最终诠释ACTIVITY_SEARCH = 0;

私有静态最终诠释SEARCH_ID = Menu.FIRST;

@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.sbooks_list);
    mDbHelper =新SBooksDbAdapter(本);
    mDbHelper.open();

}

//创建菜单选项
@覆盖
公共布尔onCreateOptionsMenu(功能菜单){
    布尔结果= super.onCreateOptionsMenu(菜单);
    menu.add(0,SEARCH_ID,0,R.string.menu_search);
    返回结果;
}

@覆盖
公共布尔onOptionsItemSelected(菜单项项){
    开关(item.getItemId()){
    案例SEARCH_ID:
        意向意图=新的意图(这一点,SBooksSearch.class);
        startActivityForResult(意向,ACTIVITY_SEARCH);

    返回super.onOptionsItemSelected(项目);
}

@覆盖
保护无效onActivityResult(INT申请code,INT结果code,意图意图){
super.onActivityResult(要求code,因此code,意图);
开关(要求code){
案例ACTIVITY_SEARCH:
捆绑包= intent.getExtras();
title_raw = bundle.getString(SBooksDbAdapter.KEY_TITLE_RAW);
如果(title_raw!= NULL){
光标光标= mDbHelper.searchData(title_raw);
的String []从=新的String [] {SBooksDbAdapter.KEY_ROWID,
SBooksDbAdapter.KEY_TITLE,SBooksDbAdapter.KEY_LYRICS};
INT []到=新INT [] {R.id.id,R.id.title,R.id.lyrics};
SimpleCursorAdapter适配器=
新SimpleCursorAdapter(这一点,R.layout.sbooks_row,光标,从,到);
setListAdapter(适配器);

}

}
}
 

}

这是我的子活动:

 公共类SBooksSearch延伸活动{
私人的EditText mTextSearch;
私人按钮searchButton;
私人SBooksDbAdapter mDbHelper;

@覆盖
保护无效的onCreate(包savedInstanceState){
// TODO自动生成方法存根
super.onCreate(savedInstanceState);
的setContentView(R.layout.sbooks_search);

mTextSearch =(EditText上)findViewById(R.id.text_search);
sea​​rchButton =(按钮)findViewById(R.id.btn_search);

sea​​rchButton.setOnClickListener(新View.OnClickListener(){
公共无效的onClick(视图v){
意向意图=新的意图();
intent.putExtra(SBooksDbAdapter.KEY_TITLE_RAW,mTextSearch.getText()的toString());
的setResult(RESULT_OK,意图);
			完();

}
});
}

@覆盖
保护无效的onSaveInstanceState(包outState){
super.onSaveInstanceState(outState);

}
@覆盖
保护无效的onPause(){
super.onPause();
的CheckState();

}
@覆盖
保护无效onResume(){
super.onResume();
}


私人无效的CheckState(){

}}
 

这是logcat的:

  08-12 18:44:39.211:WARN / InputManagerService(581):对非重点客户com.android.internal.view.IInputMethodClient$Stub$Proxy@43719140开始输入(UID = 10004 PID = 623)
08-12 18:44:39.510:信息/ ActivityManager(581):显示活动com.original.sbooks / .SBooks:4934毫秒
08-12 18:44:40.821:WARN / KeyCharacterMap(730):没有键盘ID 0
08-12 18:44:40.821:WARN / KeyCharacterMap(730):使用默认的键盘对应:/system/usr/keychars/qwerty.kcm.bin
08-12 18:44:41.412:信息/ ARMAssembler(581):产生scanline__00000177:03515104_00001A01_00000000 [64 IPP](89英寸),在[0x297608:0x29776c在952924 NS
08-12 18:44:41.520:信息/ ARMAssembler(581):产生scanline__00000177:03515104_00000A01_00000000 [46 IPP](70英寸),在[0x297798:0x2978b0在517061 NS
08-12 18:44:42.171:信息/ ActivityManager(581):启动活动:意向{补偿= {com.original.sbooks / com.original.sbooks.SBooksSearch}}
08-12 18:44:52.196:WARN / ActivityManager(581):启动超时已过期,放弃唤醒锁!
08-12 18:44:52.279:WARN / ActivityManager(581):活动空闲超时时间为HistoryRecord {436bfc80 {com.original.sbooks / com.original.sbooks.SBooksSearch}}
08-12 18:44:57.350:DEBUG / dalvikvm(620):GC释放4103对象/在75ms 231808字节
08-12 18:45:05.130:DEBUG / dalvikvm(649):GC释放2604对象/在88ms 150112字节
08-12 18:45:10.120:DEBUG / dalvikvm(623):GC释放2750对象/在71ms 149592字节
08-12 18:45:11.920:信息/ ActivityManager(581):显示活动com.original.sbooks / .SBooksSearch:29748毫秒
08-12 18:45:17.263:WARN / ActivityManager(581):活动暂停超时HistoryRecord {436bfc80 {com.original.sbooks / com.original.sbooks.SBooksSearch}}
08-12 18:45:26.762:WARN / ActivityManager(581):启动超时已过期,放弃唤醒锁!
08-12 18:45:27.272:WARN / ActivityManager(581):活动空闲超时时间为HistoryRecord {435a7760 {com.original.sbooks / com.original.sbooks.SBooks}}
08-12 18:46:04.905:DEBUG / AndroidRuntime(730):关闭虚拟机
08-12 18:46:04.905:WARN / dalvikvm(730):主题ID = 3:线程退出与未捕获的异常(组= 0x4000fe70)
08-12 18:46:04.905:ERROR / AndroidRuntime(730):未捕获的处理程序:螺纹主力退出,由于未捕获的异常
08-12 18:46:04.991:ERROR / AndroidRuntime(730):java.lang.RuntimeException的:不提供结果ResultInfo {谁= NULL,请求= 0,结果为0,数据= NULL}到活动{com.original。 sbooks / com.original.sbooks.SBooks}:显示java.lang.NullPointerException
08-12 18:46:04.991:ERROR / AndroidRuntime(730):在android.app.ActivityThread.deliverResults(ActivityThread.java:3005)
08-12 18:46:04.991:ERROR / AndroidRuntime(730):在android.app.ActivityThread.handleSendResult(ActivityThread.java:3047)
08-12 18:46:04.991:ERROR / AndroidRuntime(730):在android.app.ActivityThread.access $ 2300(ActivityThread.java:112)
08-12 18:46:04.991:ERROR / AndroidRuntime(730):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1721)
08-12 18:46:04.991:ERROR / AndroidRuntime(730):在android.os.Handler.dispatchMessage(Handler.java:99)
08-12 18:46:04.991:ERROR / AndroidRuntime(730):在android.os.Looper.loop(Looper.java:123)
08-12 18:46:04.991:ERROR / AndroidRuntime(730):在android.app.ActivityThread.main(ActivityThread.java:3948)
08-12 18:46:04.991:ERROR / AndroidRuntime(730):在java.lang.reflect.Method.invokeNative(本机方法)
08-12 18:46:04.991:ERROR / AndroidRuntime(730):在java.lang.reflect.Method.invoke(Method.java:521)
08-12 18:46:04.991:ERROR / AndroidRuntime(730):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:782)
08-12 18:46:04.991:ERROR / AndroidRuntime(730):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
08-12 18:46:04.991:ERROR / AndroidRuntime(730):在dalvik.system.NativeStart.main(本机方法)
08-12 18:46:04.991:ERROR / AndroidRuntime(730):由:显示java.lang.NullPointerException
08-12 18:46:04.991:ERROR / AndroidRuntime(730):在com.original.sbooks.SBooks.onActivityResult(SBooks.java:111)
08-12 18:46:04.991:ERROR / AndroidRuntime(730):在android.app.Activity.dispatchActivityResult(Activity.java:3595)
08-12 18:46:04.991:ERROR / AndroidRuntime(730):在android.app.ActivityThread.deliverResults(ActivityThread.java:3001)
 

解决方案

我认为内特是正确的关于NPE在intent.getExtras()。

您应该检查你的结果code的值,你做任何事情之前。你也可能要检查,以确保intent.hasExtra(SBooksDbAdapter.KEY_TITLE_RAW)之前,你的价值。所以,这样的事情:

 开关(要求code){
案例ACTIVITY_SEARCH:
    如果(结果code == RESULT_OK和放大器;&安培; intent.hasExtra(SBooksDbAdapter.KEY_TITLE_RAW)){
        title_raw = intent.getStringExtra(SBooksDbAdapter.KEY_TITLE_RAW);
        ...做的一切,其他的东西...
    }
}
 

I want to get the Text data value from Sub-Activity back. And everything is ok. But when the Sub-activity was opened, then I just click back "button" on the phone, it throw an exception error. I found on the android NotePad life-cycle control toturial but It's hard to understand. Can someone help me? This is my code:

public class SBooks extends ListActivity {
private String title_raw;
private SBooksDbAdapter mDbHelper;
private static final int ACTIVITY_SEARCH = 0;

private static final int SEARCH_ID = Menu.FIRST;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sbooks_list);
    mDbHelper = new SBooksDbAdapter(this);
    mDbHelper.open();

}

// Create Menu Option
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    boolean result = super.onCreateOptionsMenu(menu);
    menu.add(0, SEARCH_ID, 0, R.string.menu_search);
    return result;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()){
    case SEARCH_ID:
        Intent intent = new Intent(this, SBooksSearch.class);
        startActivityForResult(intent, ACTIVITY_SEARCH);

    return super.onOptionsItemSelected(item);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent){
	super.onActivityResult(requestCode, resultCode, intent);
		switch(requestCode){
		case ACTIVITY_SEARCH:
			Bundle bundle = intent.getExtras();
			title_raw = bundle.getString(SBooksDbAdapter.KEY_TITLE_RAW);
			if(title_raw!=null){
				Cursor cursor = mDbHelper.searchData(title_raw);
				String[] from = new String[]{ SBooksDbAdapter.KEY_ROWID,
						SBooksDbAdapter.KEY_TITLE, SBooksDbAdapter.KEY_LYRICS };
				int[] to = new int[]{ R.id.id, R.id.title, R.id.lyrics };
				SimpleCursorAdapter adapter =
					new SimpleCursorAdapter(this, R.layout.sbooks_row, cursor, from, to );
				setListAdapter(adapter);

		}

	}
}

}

This is my Sub-Activity:

public class SBooksSearch extends Activity {
private EditText mTextSearch;
private Button searchButton;
private SBooksDbAdapter mDbHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
	// TODO Auto-generated method stub
	super.onCreate(savedInstanceState);
	setContentView(R.layout.sbooks_search);

	mTextSearch = (EditText)findViewById(R.id.text_search);
	searchButton = (Button)findViewById(R.id.btn_search);

	searchButton.setOnClickListener(new View.OnClickListener(){
		public void onClick(View v){
			Intent intent = new Intent();
			intent.putExtra(SBooksDbAdapter.KEY_TITLE_RAW, mTextSearch.getText().toString());
			setResult(RESULT_OK, intent);
			finish();

		}
	});
}

@Override
protected void onSaveInstanceState(Bundle outState){
	super.onSaveInstanceState(outState);

}
@Override
protected void onPause(){
	super.onPause();
	checkState();

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


private void checkState() {

} }

This is Logcat:

08-12 18:44:39.211: WARN/InputManagerService(581): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@43719140 (uid=10004 pid=623)
08-12 18:44:39.510: INFO/ActivityManager(581): Displayed activity com.original.sbooks/.SBooks: 4934 ms
08-12 18:44:40.821: WARN/KeyCharacterMap(730): No keyboard for id 0
08-12 18:44:40.821: WARN/KeyCharacterMap(730): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
08-12 18:44:41.412: INFO/ARMAssembler(581): generated scanline__00000177:03515104_00001A01_00000000 [ 64 ipp] (89 ins) at [0x297608:0x29776c] in 952924 ns
08-12 18:44:41.520: INFO/ARMAssembler(581): generated scanline__00000177:03515104_00000A01_00000000 [ 46 ipp] (70 ins) at [0x297798:0x2978b0] in 517061 ns
08-12 18:44:42.171: INFO/ActivityManager(581): Starting activity: Intent { comp={com.original.sbooks/com.original.sbooks.SBooksSearch} }
08-12 18:44:52.196: WARN/ActivityManager(581): Launch timeout has expired, giving up wake lock!
08-12 18:44:52.279: WARN/ActivityManager(581): Activity idle timeout for HistoryRecord{436bfc80 {com.original.sbooks/com.original.sbooks.SBooksSearch}}
08-12 18:44:57.350: DEBUG/dalvikvm(620): GC freed 4103 objects / 231808 bytes in 75ms
08-12 18:45:05.130: DEBUG/dalvikvm(649): GC freed 2604 objects / 150112 bytes in 88ms
08-12 18:45:10.120: DEBUG/dalvikvm(623): GC freed 2750 objects / 149592 bytes in 71ms
08-12 18:45:11.920: INFO/ActivityManager(581): Displayed activity com.original.sbooks/.SBooksSearch: 29748 ms
08-12 18:45:17.263: WARN/ActivityManager(581): Activity pause timeout for HistoryRecord{436bfc80 {com.original.sbooks/com.original.sbooks.SBooksSearch}}
08-12 18:45:26.762: WARN/ActivityManager(581): Launch timeout has expired, giving up wake lock!
08-12 18:45:27.272: WARN/ActivityManager(581): Activity idle timeout for HistoryRecord{435a7760 {com.original.sbooks/com.original.sbooks.SBooks}}
08-12 18:46:04.905: DEBUG/AndroidRuntime(730): Shutting down VM
08-12 18:46:04.905: WARN/dalvikvm(730): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)
08-12 18:46:04.905: ERROR/AndroidRuntime(730): Uncaught handler: thread main exiting due to uncaught exception
08-12 18:46:04.991: ERROR/AndroidRuntime(730): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=0, data=null} to activity {com.original.sbooks/com.original.sbooks.SBooks}: java.lang.NullPointerException
08-12 18:46:04.991: ERROR/AndroidRuntime(730):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3005)
08-12 18:46:04.991: ERROR/AndroidRuntime(730):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3047)
08-12 18:46:04.991: ERROR/AndroidRuntime(730):     at android.app.ActivityThread.access$2300(ActivityThread.java:112)
08-12 18:46:04.991: ERROR/AndroidRuntime(730):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1721)
08-12 18:46:04.991: ERROR/AndroidRuntime(730):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-12 18:46:04.991: ERROR/AndroidRuntime(730):     at android.os.Looper.loop(Looper.java:123)
08-12 18:46:04.991: ERROR/AndroidRuntime(730):     at android.app.ActivityThread.main(ActivityThread.java:3948)
08-12 18:46:04.991: ERROR/AndroidRuntime(730):     at java.lang.reflect.Method.invokeNative(Native Method)
08-12 18:46:04.991: ERROR/AndroidRuntime(730):     at java.lang.reflect.Method.invoke(Method.java:521)
08-12 18:46:04.991: ERROR/AndroidRuntime(730):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
08-12 18:46:04.991: ERROR/AndroidRuntime(730):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
08-12 18:46:04.991: ERROR/AndroidRuntime(730):     at dalvik.system.NativeStart.main(Native Method)
08-12 18:46:04.991: ERROR/AndroidRuntime(730): Caused by: java.lang.NullPointerException
08-12 18:46:04.991: ERROR/AndroidRuntime(730):     at com.original.sbooks.SBooks.onActivityResult(SBooks.java:111)
08-12 18:46:04.991: ERROR/AndroidRuntime(730):     at android.app.Activity.dispatchActivityResult(Activity.java:3595)
08-12 18:46:04.991: ERROR/AndroidRuntime(730):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3001)
解决方案

I think Nate is correct about the NPE at intent.getExtras().

You should be checking the value of your result code before you do anything. You also might want to check to make sure intent.hasExtra(SBooksDbAdapter.KEY_TITLE_RAW) before you get that value. So, something like this:

switch(requestCode){
case ACTIVITY_SEARCH:
    if (resultCode == RESULT_OK && intent.hasExtra(SBooksDbAdapter.KEY_TITLE_RAW)) {
        title_raw = intent.getStringExtra(SBooksDbAdapter.KEY_TITLE_RAW);
        ... do all that other stuff ...
    }
}

这篇关于控制返回]按钮"在机器人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-16 03:15