这是显示我的对话框活动的代码。每当我试图打开这个意图时,我的应用程序就会强制关闭。所以请告诉我代码中的错误。下面是日志。
03-28 12:11:36.851:e/androidruntime(681):致命异常:main 03-28
12:11:36.851:e/androidruntime(681):java.lang.runtimeexception:
无法启动活动
组件信息{com.neelrazin.noteit/com.neelrazin.noteit.password}:
java.lang.nullPointerException 03-28 12:11:36.851:
E/AndroidRuntime(681):在
Android .App.ActuviyTrime.PrimeActudiCycActudio(AccviyTyth.java:1647)
03-28 12:11:36.851:E/AndroidRuntime(681):在
安卓(1663)
03-28 12:11:36.851:E/AndroidRuntime(681):在
Actudio.App.AccviyTyth.Access 1500美元(AccviyTyth.java:117)03-28
12:11:36.851:E/AndroidRuntime(681):在
Actudio.App.ActuviyT线$ H.HoalMeMeSeX(ActuviyTrim.java:931)
03-28 12:11:36.851:E/AndroidRuntime(681):在
Addio.OS.Halder-Debug消息(处理程序:Java:99)03-28
12:11:36.851:E/AndroidRuntime(681):在
安卓.OS.Looper-Loo.(循环器. Java:123)03-28 12:11: 36.851:
E/AndroidRuntime(681):在
Actudio.App.ActuviyTrime.主(ActhviyTo.java:3683)03-28
12:11:36.851:E/AndroidRuntime(681):在
Java.Lang.Eng.Simult.FutoEnnistic(原生方法)03-28
12:11:36.851:E/AndroidRuntime(681):在
Java.Lang.Eng.Simult.Voice(方法.java:507)03-28 12:11: 36.851:
E/AndroidRuntime(681):在
COM.Android .No.OS.ZyGoTynIt $方法和AgsCalal.Run(ZyGoTynIt.java:839)
03-28 12:11:36.851:E/AndroidRuntime(681):在
com内部操作系统(主:Java:597)
12:11:36.851:E/AndroidRuntime(681):在
Dalvik.System.Nativestart.Main(本地方法)03-28 12:11:36.851:
e/androidruntime(681):原因:java.lang.nullPointerException 03-28
12:11:36.851:E/AndroidRuntime(681):在
Neelasin .No.I.Couth.OnCube(密码:Java:57)03-28
12:11:36.851:E/AndroidRuntime(681):在
Addio.App.Tebug .CalActuviyOnCuto(To仪. Java:1047)
03-28 12:11:36.851:E/AndroidRuntime(681):在
Android .App.ActuviyTrime.PrimeActudiCycActudio(AccviyTyth.java:1611)
public class Password extends Activity {
final Context context = this;
public Long mRowId;
private NotesDbAdapter mDbHelper;
String password;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//setContentView(R.layout.password);
mRowId = (savedInstanceState == null) ? null :
(Long) savedInstanceState.getSerializable(NotesDbAdapter.KEY_ROWID);
if (mRowId == null) {
Bundle extras = getIntent().getExtras();
mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID)
: null;
}
mDbHelper = new NotesDbAdapter(this);
mDbHelper.open();
Cursor notesC = mDbHelper. fetchNote( mRowId);
startManagingCursor(notesC);
final String pass = notesC.getString( notesC.getColumnIndex("passw") );
// custom dialog
final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.password);
dialog.setTitle("Enter Password");
final EditText enterpass = (EditText) dialog.findViewById(R.id.edtext);
Button ok=(Button)findViewById(R.id.dialogButtonOK);
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
password= enterpass.getText().toString();
if(password.equals(pass.toString())){
Intent i= new Intent(getBaseContext(),NoteEditor.class);
i.putExtra(NotesDbAdapter.KEY_ROWID,mRowId);
startActivity(i);
}
}
});
Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonCANCEL);
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
dialog.show();
}
最佳答案
在这里:
Button ok=(Button)findViewById(R.id.dialogButtonOK);//<<
在从活动访问视图之前,您忘记调用
setContentView
。将活动的onCreate
中的活动布局设置为:@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //<<<
.....
或者如果
dialogButtonOK
按钮在对话框中,则使用对话框实例将ok
按钮初始化为:Button ok=(Button)dialog.findViewById(R.id.dialogButtonOK);