强制关闭按后退按钮

问题描述:

,当我得到一个错误,如果我在Activitys 的一个按硬件后退按钮,我不能找出其中的错误在于 这里是我的代码:强制关闭按后退按钮

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 
} 

} 

这是我的LogCat:

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) 

有没有人看到错误?我不知道提前 感谢

编辑:

 @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     super.onActivityResult(requestCode, resultCode, intent); 
     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; 
     } 
    } 

我贴我的onActivityResult,也许是错误的地方在那里。

+3

是的我看到它:'由com.reekapps.simplenote.MainActivity.onActivityResult(MainActivity.java:171)产生的java.lang.NullPointerException' – keyser

+1

@ᴋᴇʏsᴇʀ你赢了我1秒。 REEK应用程序,如果您需要更多帮助,则必须将您的onActivityResult方法也放在一边。 – gian1200

+0

我现在发布了onActivityResult,请你检查一下吗? – mind

您开始此活动以获取结果,因此您需要在离开此活动时提供结果。尝试使用方法onBackPressed()

例如:

@Override 
public void onBackPressed() { 
    setResult(RESULT_CANCELED); 
    finish(); 
} 

还要检查你onActivityResult在MainActivity,也许你需要一些外部逻辑添加到它。

关于上次编辑:

你继续前进的resultCode,不仅requestCode像你现在要做的。 例如,你可以做水木清华这样的:

@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; 
    } 
} 
} 

这是不是最好的方式,但我用你的代码帮助:)

祝你好运!

+0

谢谢,这工作。 – mind