Android:后退按钮问题或程序逻辑流

Android:后退按钮问题或程序逻辑流,android,back-button,Android,Back Button,我正在尝试创建一个android应用程序。我在其中创建了两个活动。在第一个活动中,用户通过点击按钮登录,如果他选中了“让我登录”复选框,那么下次他在注销后进入其主页时,应用程序会记住他的用户名并通过,如果他在第二个活动中没有注销(按注销按钮),则无法访问主页(第一个活动)。若他并没有注销,那个么我想通过使用后退按钮或重新启动应用程序来阻止用户访问登录主页 运行程序->输入登录信息->下一页->注销(此运行正常) 运行程序->输入登录信息->下一页->按back按button->然后按注销按钮->

我正在尝试创建一个android应用程序。我在其中创建了两个活动。在第一个活动中,用户通过点击按钮登录,如果他选中了“让我登录”复选框,那么下次他在注销后进入其主页时,应用程序会记住他的用户名并通过,如果他在第二个活动中没有注销(按注销按钮),则无法访问主页(第一个活动)。若他并没有注销,那个么我想通过使用后退按钮或重新启动应用程序来阻止用户访问登录主页

运行程序->输入登录信息->下一页->注销(此运行正常) 运行程序->输入登录信息->下一页->按back按button->然后按注销按钮->出现错误(强制停止)

我的问题是,当我按下“后退”按钮,然后在第二个活动中单击“注销”按钮时,Emmolator会向我显示应用程序意外关闭的消息,并在logcat窗口中强制停止。错误-

ERROR/AndroidRuntime(348): FATAL EXCEPTION: main  
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=0, data=null} to activity {com.example/com.example.MyActivity}: java.lang.NullPointerException
我的主页(第一个活动代码为)=

我的第二个活动(欢迎用户和注销按钮)代码是=

package com.example;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/**
* Created by IntelliJ IDEA.
* User: devendra
* Date: 18/1/13
* Time: 9:57 AM
* To change this template use File | Settings | File Templates.
*/
public class Second extends Activity{
SharedPreferences sharedPreferences;
String str, str1,str2,str3;
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main2);
    sharedPreferences = getSharedPreferences("computer" , MODE_PRIVATE);
    str3 = sharedPreferences.getString("key5" , "none");
    str = sharedPreferences.getString("key" , "null");
    Button button=(Button)findViewById(R.id.button2) ;
    TextView textView =(TextView)findViewById(R.id.text1);
    textView.setText("Welcome"+" " +str3);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //To change body of implemented methods use File | Settings | File Templates.
            SharedPreferences.Editor editor1 = sharedPreferences.edit();
            editor1.putString("key", "True");
            str1 = sharedPreferences.getString("key1" , "Enter your username");
            str2 = sharedPreferences.getString("key2","Enter your password");
            editor1.remove("key1");
            editor1.remove("key2");

            Intent intent = new  Intent();
            intent.putExtra("txt",str1);
            intent.putExtra("txt1",str2);
            setResult(RESULT_OK, intent);
            editor1.commit();
            finish();
        }
    });
}

@Override
public void onBackPressed() {
    super.onBackPressed();    //To change body of overridden methods use File | Settings | File Templates.
   SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString("key" , "false");
    editor.commit();
    System.out.println("you in back press");
    if (str.equalsIgnoreCase("false"));
    {
        Intent intent2 = new Intent(Second.this , Second.class);
        startActivity(intent2);
    }
    finish();
}
 }

这是logcat窗口中的完整错误描述

{01-24 16:24:02.810: DEBUG/dalvikvm(382): Debugger has detached; object registry had 1   entries
01-24 16:24:04.702: INFO/dalvikvm(68): Jit: resizing JitTable from 1024 to 2048
01-24 16:24:04.750: INFO/ActivityManager(68): Displayed com.example/.MyActivity: +2s89ms
01-24 16:24:09.940: DEBUG/dalvikvm(147): GC_EXPLICIT freed 125K, 50% free 2990K/5895K,     external 5874K/7299K, paused 133ms
01-24 16:24:14.930: DEBUG/dalvikvm(242): GC_EXPLICIT freed 7K, 54% free 2544K/5511K, external 1625K/2137K, paused 92ms
01-24 16:24:20.030: DEBUG/dalvikvm(287): GC_EXPLICIT freed 503K, 55% free 2598K/5703K, external 1625K/2137K, paused 121ms
01-24 16:24:20.230: INFO/ActivityManager(68): Starting: Intent { cmp=com.example/.Second } from pid 390
01-24 16:24:20.850: INFO/ActivityManager(68): Displayed com.example/.Second: +563ms
01-24 16:24:22.800: WARN/KeyCharacterMap(390): No keyboard for id 0
01-24 16:24:22.810: WARN/KeyCharacterMap(390): Using default keymap: /system  /usr/keychars/qwerty.kcm.bin
01-24 16:24:22.820: INFO/System.out(390): you in back press
01-24 16:24:22.830: INFO/ActivityManager(68): Starting: Intent { cmp=com.example/.Second } from pid 390
01-24 16:24:22.830: WARN/ActivityManager(68): Duplicate finish request for HistoryRecord{406b1eb0 com.example/.Second}
01-24 16:24:23.520: INFO/ActivityManager(68): Displayed com.example/.Second: +673ms
01-24 16:24:26.340: DEBUG/AndroidRuntime(390): Shutting down VM
01-24 16:24:26.340: WARN/dalvikvm(390): threadid=1: thread exiting with uncaught exception (group=0x40015560)
01-24 16:24:26.370: ERROR/AndroidRuntime(390): FATAL EXCEPTION: main
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=0, data=null} to activity {com.example/com.example.MyActivity}: java.lang.NullPointerException
    at android.app.ActivityThread.deliverResults(ActivityThread.java:2532)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:2574)
    at android.app.ActivityThread.access$2000(ActivityThread.java:117)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:3683)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.NullPointerException
    at com.example.MyActivity.onActivityResult(MyActivity.java:69)
    at android.app.Activity.dispatchActivityResult(Activity.java:3908)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:2528)
    ... 11 more
    01-24 16:24:26.380: WARN/ActivityManager(68): Force finishing activity com.example/.MyActivity
    01-24 16:24:26.920: WARN/ActivityManager(68): Activity pause timeout for HistoryRecord{4061a9d0 com.example/.MyActivity}
    01-24 16:24:33.801: DEBUG/dalvikvm(320): GC_EXPLICIT freed 323K, 54% free 2539K/5511K, external 1625K/2137K, paused 104ms
    01-24 16:24:38.356: WARN/ActivityManager(68): Activity destroy timeout for HistoryRecord{4061a9d0 com.example/.MyActivity}
    01-24 16:24:38.702: WARN/ActivityManager(68): Activity destroy timeout for HistoryRecord{406ef998 com.example/.Second}
    01-24 16:24:50.600: INFO/Process(390): Sending signal. PID: 390 SIG: 9
    01-24 16:24:51.310: INFO/ActivityManager(68): Process com.example (pid 390) has died.
    01-24 16:24:51.320: INFO/WindowManager(68): WIN DEATH: Window{4069f500 com.example/com.example.MyActivity paused=false}
01-24 16:24:51.340: ERROR/InputDispatcher(68): channel '4055da70 com.example/com.example.Second (server)' ~ Consumer closed input channel or an error occurred.  events=0x8
01-24 16:24:51.340: ERROR/InputDispatcher(68): channel '4055da70 com.example/com.example.Second (server)' ~ Channel is unrecoverably broken and will be disposed!
01-24 16:24:51.450: INFO/WindowManager(68): WIN DEATH: Window{4055da70 com.example/com.example.Second paused=false}}

您有两个不同的值来标识对
startActivityForResult()
的调用是如何处理的。打开的是
requestCode
,它标识了一个
startActivityForResult()
调用,因为您可能有多个调用。您使用了
Requestcd
作为标识符

第二个是
resultCode
,它让您了解结果的状态。如果其值为
RESULT\u OK
,则结果已在已启动的活动中成功设置。如果按“上一步”按钮,该值将为
RESULT\u cancelled

在您的情况下,您需要检查这两个值,并且仅当
requestCode
resultCode
是您期望的值时才执行。如果值不同,你应该考虑做一些事情来对此做出反应。一种可能性是通知用户他应该执行的任务(例如:选择图片)已取消

仅当设置了结果时,才尝试以下代码来读取意图的数据

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);                
    if (requestCode == Requestcd) {
        if (resultCode == RESULT_OK) {
            String str13 = data.getExtras().getString("txt");
            String str14 = data.getExtras().getString("txt1");
            editText.setText(str13);
            editText1.setText(str14);
        }
    }
}

请将完整的stacktrace从logcat@ben75ben我刚刚发布了logcat跟踪……你可以查看一下,我真的希望你能描述一下为什么你的代码会解决这个问题。。。这几乎是一个代码唯一的答案…哦,不要解释太多的话。有人可能会遇到麻烦去学习一些东西……我投了反对票,因为回答和帮助之间有巨大的区别。你只是回答,但你帮不了忙。@SKT我的天哪,你只是解决了我的问题……爱你,伙计……我的代码运行正常……请你解释一下这是如何解决我的问题的problem@WarrenFaith我已经解释了为什么这个代码可能有用。那有用吗。?
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);                
    if (requestCode == Requestcd) {
        if (resultCode == RESULT_OK) {
            String str13 = data.getExtras().getString("txt");
            String str14 = data.getExtras().getString("txt1");
            editText.setText(str13);
            editText1.setText(str14);
        }
    }
}