NullPointerException在Android.os.Bundle上

当我需要将一些数据从一个Activity传输到另一个Activity时,我的代码有问题。 第一个ActivityViewCashflow ),我想将一些数据从ViewCashflow传输到第二个ActivityNewTransaction )。 这里运行良好,没有错误,数据传输成功。 但是,我不知道当我直接运行第二个Activity时发生了什么(不是像我之前传输数据时那样来自第一个Activity )我在用于从第一个Activity接收数据的方法上得到了空指针exception。

我试图在那里找到所有的东西,但仍未解决。 在其他ActivityViewCategoryAddCategory )中,我正在做同样的事情(将数据从ViewCategory传输到AddCategory ),它运行良好,当我直接运行AddCategory时没有错误,但代码与我得到的两个Activity完全相同错误。

请高手帮帮我。 谢谢你。

错误报告给我这个:

引起:java.lang.NullPointerException:尝试在com.example.ever_ncn.cashflow.NewTransaction.onCreate(NewTransaction)的空对象引用上调用虚方法’boolean android.os.Bundle.getBoolean(java.lang.String)’的.java:68)

NB。 这是我的第一个Activity代码( ViewCashflow

 public class ViewCashflow extends ActionBarActivity { private SQLiteDatabase db; private static Button BtnIAddCateg; private static Button BtnICancelCateg; private static final String TAG = CategorySetting.class.getSimpleName(); DatabaseHelper dBHelper = new DatabaseHelper (this); private ListView list; private ArrayList arrTransId = new ArrayList(); private ArrayList arrTransName = new ArrayList(); private ArrayList arrTransAmount = new ArrayList(); private ArrayList arrTransType= new ArrayList(); private ArrayList arrTransDate= new ArrayList(); private ArrayList arrCategId= new ArrayList(); private AlertDialog.Builder build; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_view_cashflow); displayData(); } //udah beres udah bisa show, tinggal action click udh bisa tp value blm pindah,, //penggunaan Radio Button belum nanti di NewTrans private void displayData() { db = dBHelper.getReadableDatabase(); Cursor mCursor = db.rawQuery("SELECT * FROM " + dBHelper.TABLE_Trans_NAME, null); list = (ListView)findViewById(android.R.id.list); arrTransId.clear(); arrTransName.clear(); arrTransAmount.clear(); arrTransType.clear(); arrTransDate.clear(); arrCategId.clear(); if (mCursor.moveToFirst()) { do { arrTransId.add(mCursor.getString(mCursor.getColumnIndex(dBHelper.TOL1))); arrTransName.add(mCursor.getString(mCursor.getColumnIndex(dBHelper.TOL2))); arrTransAmount.add(mCursor.getString(mCursor.getColumnIndex(dBHelper.TOL3))); arrTransType.add(mCursor.getString(mCursor.getColumnIndex(dBHelper.TOL4))); arrTransDate.add(mCursor.getString(mCursor.getColumnIndex(dBHelper.TOL5))); arrCategId.add(mCursor.getString(mCursor.getColumnIndex(dBHelper.TOL6))); } while (mCursor.moveToNext()); } DisplayAdapterTrans disadptr = new DisplayAdapterTrans(ViewCashflow.this, arrTransId, arrTransName, arrTransAmount, arrTransType, arrTransDate, arrCategId); list.setAdapter(disadptr); mCursor.close(); list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { //click to update data // namanya blom diubah coeg Intent i = new Intent(getApplicationContext(), NewTransaction.class); i.putExtra("TransId", arrTransId.get(arg2)); i.putExtra("TransName", arrTransName.get(arg2)); i.putExtra("TransAmount", arrTransAmount.get(arg2)); i.putExtra("TransType", arrTransType.get(arg2)); i.putExtra("TransDate", arrTransDate.get(arg2)); i.putExtra("TransCategId", arrCategId.get(arg2)); i.putExtra("update", true); startActivity(i); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_view_cashflow, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } 

而这一个用于第二个ActivityNewTransaction

 public class NewTransaction extends ActionBarActivity { Button btnIDate; Button btnIAdd; Button btnICancel; RadioButton RdIncome; RadioButton RdOutcome; EditText txtAmount, txtCashflow, txtType; DatabaseHelper dbHelper = new DatabaseHelper(this); SQLiteDatabase db; MainActivity mainAct = new MainActivity(); int year_x, month_x, day_x; static final int DIALOG_ID=0; public static long dateSelected; public static Integer intAmount = null; private boolean isUpdate; private String id, transname, transamount, transtype, transdate, transcategid; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_new_transaction); txtAmount = (EditText)findViewById(R.id.txtAmount); txtCashflow = (EditText)findViewById(R.id.txtCashflow); txtType = (EditText)findViewById(R.id.txtType); RdIncome = (RadioButton)findViewById(R.id.RdBtnIncome); RdOutcome = (RadioButton)findViewById(R.id.RdBtnOutcome); final Calendar cal = Calendar.getInstance(); year_x = cal.get(Calendar.YEAR); month_x = cal.get(Calendar.MONTH); day_x = cal.get(Calendar.DAY_OF_MONTH); TextView lblIDate = (TextView)findViewById(R.id.lblDate); lblIDate.setText("Date selected : " + year_x + "-" + month_x + "-" + day_x); //EditText lbltxt = (EditText)findViewById(R.id.txtType); dateSelected = (year_x+month_x+day_x); String catSelected = mainAct.getCatSelected(); //kena null object dsni entah knapa showDialogOnClick(); isUpdate=getIntent().getExtras().getBoolean("update"); if(isUpdate) { id=getIntent().getExtras().getString("TransId"); transname=getIntent().getExtras().getString("TransName"); transamount=getIntent().getExtras().getString("TransAmount"); transtype=getIntent().getExtras().getString("TransType"); transdate=getIntent().getExtras().getString("CategDate"); transcategid=getIntent().getExtras().getString("CategCategId"); txtCashflow.setText(transname); txtType.setText(transtype); txtAmount.setText(transamount); } if(RdIncome.isChecked()){ txtType.setText("Income"); }else{ txtType.setText("Outcome"); } onButtonClickButtonListener(dateSelected, catSelected); } public void showDialogOnClick(){ //TextView lblIDate = (TextView)findViewById(R.id.lblDate); btnIDate = (Button)findViewById(R.id.btnDate); btnIDate.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { showDialog(DIALOG_ID); } } ); } @Override protected Dialog onCreateDialog(int id){ if (id == DIALOG_ID) return new DatePickerDialog(this, dpickerListener , year_x, month_x, day_x); return null; } public DatePickerDialog.OnDateSetListener dpickerListener = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { TextView lblIDate = (TextView)findViewById(R.id.lblDate); year_x= year; month_x = monthOfYear + 1; day_x = dayOfMonth; lblIDate.setText("Date selected : " + year_x + "-" + month_x + "-" + day_x); Toast.makeText(NewTransaction.this, year_x + "/" + month_x + "/" + day_x, Toast.LENGTH_LONG).show(); //DateFormat.getDateInstance().format(myDatePicker.getCalendarView().getDate()); } }; private void clearText(){ txtCashflow.clearComposingText(); txtAmount.clearComposingText(); txtType.clearComposingText(); } public void onButtonClickButtonListener(final long dateSelected, final String catSelected){ btnIAdd = (Button)findViewById(R.id.btnAddTrans); btnIAdd.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { /*if(RdIncome.isChecked()){ txtType.setText("Income"); }else{ txtType.setText("Outcome"); }*/ if (isUpdate) { //update Toast.makeText(NewTransaction.this, "Clicked", Toast.LENGTH_LONG).show(); intAmount = Integer.parseInt(txtAmount.getText().toString()); boolean isInserted = dbHelper.updateTransData(id, txtCashflow.getText().toString(), intAmount, txtType.getText().toString(), dateSelected, catSelected, null); if (isInserted == true) { Toast.makeText(NewTransaction.this, "Inserted", Toast.LENGTH_LONG).show(); clearText(); Intent intent = new Intent( NewTransaction.this, ViewCashflow.class ); startActivity(intent); } else Toast.makeText(NewTransaction.this, "Not Inserted", Toast.LENGTH_LONG).show(); } else { //insert Toast.makeText(NewTransaction.this, "Clicked", Toast.LENGTH_LONG).show(); intAmount = Integer.parseInt(txtAmount.getText().toString()); boolean isInserted = dbHelper.insertTransData(txtCashflow.getText().toString(), intAmount, txtType.getText().toString(), dateSelected, catSelected, null); if (isInserted == true) { Toast.makeText(NewTransaction.this, "Inserted", Toast.LENGTH_LONG).show(); clearText(); Intent intent = new Intent( NewTransaction.this, ViewCashflow.class ); startActivity(intent); } else Toast.makeText(NewTransaction.this, "Not Inserted", Toast.LENGTH_LONG).show(); } } }); btnICancel = (Button)findViewById(R.id.btnCancelTrans); btnICancel.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent( NewTransaction.this, MainActivity.class ); startActivity(intent); } } ); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_new_transaction_, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } 

这是我的CategorySetting / ViewCategory代码(另一个使用这种代码模式的Activity ):

 public class CategorySetting extends Activity { private SQLiteDatabase db; private static Button BtnIAddCateg; private static Button BtnICancelCateg; private static final String TAG = CategorySetting.class.getSimpleName(); DatabaseHelper dBHelper = new DatabaseHelper (this); private ListView list; private ArrayList arrCategId = new ArrayList(); private ArrayList arrCategName = new ArrayList(); private ArrayList arrCategNote = new ArrayList(); private ArrayList arrCategCurr = new ArrayList(); private AlertDialog.Builder build; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_category_setting); onButtonClickButtonListener(); //ListView list = getListView(); //showListView(); displayData(); onLongClickListener(); } private void displayData() { db = dBHelper.getReadableDatabase(); Cursor mCursor = db.rawQuery("SELECT * FROM " + dBHelper.TABLE_Categ_NAME, null); list = (ListView)findViewById(android.R.id.list); arrCategId.clear(); arrCategName.clear(); arrCategNote.clear(); arrCategCurr.clear(); if (mCursor.moveToFirst()) { do { arrCategId.add(mCursor.getString(mCursor.getColumnIndex(dBHelper.COL1))); arrCategName.add(mCursor.getString(mCursor.getColumnIndex(dBHelper.COL2))); arrCategNote.add(mCursor.getString(mCursor.getColumnIndex(dBHelper.COL3))); arrCategCurr.add(mCursor.getString(mCursor.getColumnIndex(dBHelper.COL4))); } while (mCursor.moveToNext()); } DisplayAdapter disadpt = new DisplayAdapter(CategorySetting.this, arrCategId, arrCategName, arrCategId, arrCategCurr); list.setAdapter(disadpt); mCursor.close(); list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { //click to update data Intent i = new Intent(getApplicationContext(), AddCategory.class); i.putExtra("CategId", arrCategId.get(arg2)); i.putExtra("CategName", arrCategName.get(arg2)); i.putExtra("CategNote", arrCategNote.get(arg2)); i.putExtra("CategCurr", arrCategCurr.get(arg2)); i.putExtra("update", true); startActivity(i); } }); } private void onLongClickListener(){ ListView list = (ListView)findViewById(android.R.id.list); list.setOnItemLongClickListener(new OnItemLongClickListener() { public boolean onItemLongClick(AdapterView arg0, View arg1, final int arg2, long arg3) { build = new AlertDialog.Builder(CategorySetting.this); build.setTitle("Delete " + arrCategName.get(arg2)); build.setMessage("Do you want to delete ?"); build.setPositiveButton("Yes",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Toast.makeText( getApplicationContext(), arrCategName.get(arg2) + " is deleted.", Toast.LENGTH_LONG).show(); db.delete( dBHelper.TABLE_Categ_NAME, dBHelper.COL1 + "=" + arrCategId.get(arg2), null); displayData(); dialog.cancel(); } }); build.setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); AlertDialog alert = build.create(); alert.show(); return true; } }); } //ListView view = getListView(); //iew.addHeaderView(getLayoutInflater().inflate(R.layout.trans, null)); //db = dBHelper.getWritableDatabase(); //this.muat_ulang(); /*public void reload(){ try { DatabaseHelper dbHelper = new DatabaseHelper(this.getApplicationContext()); db = dbHelper.getWritableDatabase(); Cursor c = db.rawQuery("SELECT CategName FROM " + tableName, null); if (c != null ) { if (c.moveToFirst()) { do { String categName = c.getString(c.getColumnIndex("CategName")); }while (c.moveToNext()); } } } catch (SQLiteException se ) { Log.e(getClass().getSimpleName(), "Could not create or Open the database"); } finally { if (db != null) db.execSQL("DELETE FROM " + tableName); db.close(); } }*/ @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_category_setting, menu); return true; } public void onButtonClickButtonListener(){ BtnIAddCateg = (Button)findViewById(R.id.btnAddNewCateg); BtnIAddCateg.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Intent intentAddCateg = new Intent ("com.example.ever_ncn.cashflow.AddCategory"); intentAddCateg.putExtra("update", false); startActivity(intentAddCateg); startActivity(intentAddCateg); } } ); BtnICancelCateg = (Button)findViewById(R.id.btnCancelCateg); BtnICancelCateg.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent( CategorySetting.this, MainActivity.class ); startActivity(intent); } } ); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } 

这个用于AddCategory

 public class AddCategory extends ActionBarActivity { private static Button BtnIAdd; private static Button BtnICancel; EditText txtcategname, txtType; Spinner selectCurrency; ArrayAdapter adapterCurrency; DatabaseHelper DbHelper = new DatabaseHelper(this); SQLiteDatabase db; private boolean isUpdate; private String id, categname, categnote, categcurr; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_category); txtcategname = (EditText)findViewById(R.id.editText); txtType = (EditText)findViewById(R.id.editText2); BtnICancel = (Button)findViewById(R.id.btnCancel); BtnIAdd = (Button)findViewById(R.id.btnAdd); //spinner selectCurrency = (Spinner) findViewById(R.id.spin_selectCurrency); adapterCurrency = ArrayAdapter.createFromResource(this, R.array.CurrencyName,android.R.layout.simple_spinner_item ); adapterCurrency.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); selectCurrency.setAdapter(adapterCurrency); selectCurrency.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { Toast.makeText(getBaseContext(), parent.getItemAtPosition(position) + " selected", Toast.LENGTH_LONG).show(); String currencyValue = String.valueOf(parent.getSelectedItem()); } @Override public void onNothingSelected(AdapterView parent) { } }); isUpdate=getIntent().getExtras().getBoolean("update"); if(isUpdate) { id=getIntent().getExtras().getString("CategId"); categname=getIntent().getExtras().getString("CategName"); categnote=getIntent().getExtras().getString("CategNote"); categcurr=getIntent().getExtras().getString("CategCurr"); txtcategname.setText(categname); txtType.setText(categnote); } addCategData(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_add_category, menu); return true; } public void addCategData(){ BtnIAdd.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(AddCategory.this, "Clicked", Toast.LENGTH_LONG).show(); db=DbHelper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put(DbHelper.COL2,categname ); values.put(DbHelper.COL3,categnote ); values.put(DbHelper.COL4,categcurr ); System.out.println(""); if(isUpdate) { //update database with new data boolean isInserted = DbHelper.updateCategData(Integer.parseInt(id), txtcategname.getText().toString(), txtType.getText().toString(), selectCurrency.getSelectedItem().toString(), null); if (isInserted == true) { Toast.makeText(AddCategory.this, "Updated", Toast.LENGTH_LONG).show(); //baru sampe dsni Intent intent = new Intent( AddCategory.this, CategorySetting.class ); startActivity(intent); } else Toast.makeText(AddCategory.this, "Not Inserted", Toast.LENGTH_LONG).show(); } else { //insert data into database boolean isInserted = DbHelper.insertCategData(txtcategname.getText().toString(), txtType.getText().toString(), selectCurrency.getSelectedItem().toString(), null); if (isInserted == true) { Toast.makeText(AddCategory.this, "Inserted", Toast.LENGTH_LONG).show(); //baru sampe dsni Intent intent = new Intent( AddCategory.this, CategorySetting.class ); startActivity(intent); } else Toast.makeText(AddCategory.this, "Not Inserted", Toast.LENGTH_LONG).show(); } //close database db.close(); finish(); } } ); BtnICancel.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { finish(); } } ); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } 

这是因为当您直接启动第二个活动NewTransaction ,您不会在intent extras ,因此当您调用getIntent().getExtras(); 它返回一个null对象,这就是getIntent().getExtras().getBoolean("update"); 抛出NPE

作为解决方案:在获取数据之前尝试检查getIntent().getExtras() != null ,这将解决您的问题。

 Bundle bundle= getIntent().getExtras(); if (bundle!= null) {// to avoid the NullPointerException isUpdate=bundle.getBoolean("update"); if(isUpdate) { id=bundle.getString("TransId"); transname=bundle.getString("TransName"); transamount=bundle.getString("TransAmount"); transtype=bundle.getString("TransType"); transdate=bundle.getString("CategDate"); transcategid=bundle.getString("CategCategId"); txtCashflow.setText(transname); txtType.setText(transtype); txtAmount.setText(transamount); } } 

在ViewCashFlow类中尝试这个:

 Intent i = new Intent(Context.getApplicationContext(), NewTransaction.class); 

如果它在片段中你可以使用:

 if (getArguments() != null) { loginBody = getArguments().getParcelable(getActivity().getResources().getString(R.string.logInBodyParcelData)); } /* } catch (Exception e) { e.printStackTrace(); }*/ if (loginBody != null) { setProfile(); }