Java 按下后退按钮时强制关闭

Java 按下后退按钮时强制关闭,java,android,back,Java,Android,Back,如果在某个活动中按下“硬件后退”按钮,则会出现错误 我不知道错误在哪里 这是我的密码: import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.content.Context; import android.content.Intent; import android

如果在某个活动中按下“硬件后退”按钮,则会出现错误 我不知道错误在哪里 这是我的密码:

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

public class NoteScreen extends Activity {

/** Called when the activity is first created. */
private EditText mTitleText;
private EditText mBodyText;
private Long mRowId;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.note_screen);
    setTitle("Edit Note");

    mTitleText = (EditText) findViewById(R.id.title);
    mBodyText = (EditText) findViewById(R.id.note);
    ImageButton acceptButton = (ImageButton) findViewById(R.id.accept);

    mRowId = null;
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String title = extras.getString(NotesDbAdapter.KEY_TITLE);
        String body = extras.getString(NotesDbAdapter.KEY_BODY);
        mRowId = extras.getLong(NotesDbAdapter.KEY_ROWID);

        if (title != null) {
            mTitleText.setText(title);
        }

        if (body != null) {
            mBodyText.setText(body);
        }
    }

    acceptButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Bundle bundle = new Bundle();

            bundle.putString(NotesDbAdapter.KEY_TITLE,         mTitleText.getText().toString());
            bundle.putString(NotesDbAdapter.KEY_BODY, mBodyText.getText().toString());
            if (mRowId != null) {
                bundle.putLong(NotesDbAdapter.KEY_ROWID, mRowId);
            }

            Intent mIntent = new Intent();
            mIntent.putExtras(bundle);
            setResult(RESULT_OK, mIntent);
            finish();
        }
    });

    ImageButton cancelButton = (ImageButton) findViewById(R.id.cancel);
    cancelButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Intent i = new Intent(NoteScreen.this, MainActivity.class);
            startActivity(i);
            finish();
        }
    });





    // TODO Auto-generated method stub
}

}
这是我的日志:

11-23 19:59:10.851: E/AndroidRuntime(1009): FATAL EXCEPTION: main
11-23 19:59:10.851: E/AndroidRuntime(1009): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=0, data=null} to activity {com.reekapps.simplenote/com.reekapps.simplenote.MainActivity}: java.lang.NullPointerException
11-23 19:59:10.851: E/AndroidRuntime(1009):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3319)
11-23 19:59:10.851: E/AndroidRuntime(1009):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3362)
11-23 19:59:10.851: E/AndroidRuntime(1009):     at android.app.ActivityThread.access$1100(ActivityThread.java:141)
11-23 19:59:10.851: E/AndroidRuntime(1009):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1282)
11-23 19:59:10.851: E/AndroidRuntime(1009):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-23 19:59:10.851: E/AndroidRuntime(1009):     at android.os.Looper.loop(Looper.java:137)
11-23 19:59:10.851: E/AndroidRuntime(1009):     at android.app.ActivityThread.main(ActivityThread.java:5041)
11-23 19:59:10.851: E/AndroidRuntime(1009):     at java.lang.reflect.Method.invokeNative(Native Method)
11-23 19:59:10.851: E/AndroidRuntime(1009):     at java.lang.reflect.Method.invoke(Method.java:511)
11-23 19:59:10.851: E/AndroidRuntime(1009):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
11-23 19:59:10.851: E/AndroidRuntime(1009):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
11-23 19:59:10.851: E/AndroidRuntime(1009):     at dalvik.system.NativeStart.main(Native Method)
11-23 19:59:10.851: E/AndroidRuntime(1009): Caused by: java.lang.NullPointerException
11-23 19:59:10.851: E/AndroidRuntime(1009):     at com.reekapps.simplenote.MainActivity.onActivityResult(MainActivity.java:171)
11-23 19:59:10.851: E/AndroidRuntime(1009):     at android.app.Activity.dispatchActivityResult(Activity.java:5293)
11-23 19:59:10.851: E/AndroidRuntime(1009):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3315)
11-23 19:59:10.851: E/AndroidRuntime(1009):     ... 11 more
11-23 19:59:43.861: E/Trace(1120): error opening trace file: No such file or directory (2)
有人看到错误了吗?我不知道 提前谢谢

编辑:


我发布了我的onActivityResult,可能错误就在那里。

您启动此活动是为了获得结果,因此您需要在退出此活动时交付结果。尝试跳过方法
onBackPressed()

例如:

@Override
public void onBackPressed() {
  setResult(RESULT_CANCELED);
  finish();
}
还可以在MainActivity中检查ActivityResult的
,可能还需要添加一些外部逻辑

关于上次编辑:

您需要继续执行
resultCode
,而不仅仅是像现在这样执行
requestCode
。 例如,您可以这样做smth:

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
 if (resultCode == RESULT_OK) {
    Bundle extras = intent.getExtras();
    switch(requestCode) {
        case ACTIVITY_CREATE:
            String title = extras.getString(NotesDbAdapter.KEY_TITLE);
            String body = extras.getString(NotesDbAdapter.KEY_BODY);
            mDbHelper.createNote(title, body);
            fillData();
            break;
        case ACTIVITY_EDIT:
            Long rowId = extras.getLong(NotesDbAdapter.KEY_ROWID);
            if (rowId != null) {
                String editTitle = extras.getString(NotesDbAdapter.KEY_TITLE);
                String editBody = extras.getString(NotesDbAdapter.KEY_BODY);
                mDbHelper.updateNote(rowId, editTitle, editBody);
            }
            fillData();
            break;
    }
}
}
这不是最好的方法,但我使用您的代码来帮助:)


祝你好运

是的,我看到了:
是由com.reekapps.simplenote.MainActivity.onActivityResult(MainActivity.java:171)上的java.lang.NullPointerException引起的@ᴋᴇʏsᴇʀ你以1秒的优势赢了我。REEK Apps,如果你需要更多帮助,你也必须pase你的onActivityResult方法。我现在发布了onActivityResult,你能检查一下吗?
 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
 if (resultCode == RESULT_OK) {
    Bundle extras = intent.getExtras();
    switch(requestCode) {
        case ACTIVITY_CREATE:
            String title = extras.getString(NotesDbAdapter.KEY_TITLE);
            String body = extras.getString(NotesDbAdapter.KEY_BODY);
            mDbHelper.createNote(title, body);
            fillData();
            break;
        case ACTIVITY_EDIT:
            Long rowId = extras.getLong(NotesDbAdapter.KEY_ROWID);
            if (rowId != null) {
                String editTitle = extras.getString(NotesDbAdapter.KEY_TITLE);
                String editBody = extras.getString(NotesDbAdapter.KEY_BODY);
                mDbHelper.updateNote(rowId, editTitle, editBody);
            }
            fillData();
            break;
    }
}
}