NullPointerException On Android.os.Bundle

匿名 (未验证) 提交于 2019-12-03 02:01:02

问题:

I have some problem with my code, when I need to transfer some data from one Activity to another one. First Activity (ViewCashflow) and I want transfer some data from ViewCashflow to second Activity (NewTransaction). Here its working well with no error, the data transferred successfully. But, I don't know what's going on when I run the second Activity directly (not from first Activity like before when I transfer the data) I got null pointer exception on the method that I use to receive the data from first Activity.

I have tried to figure all things there, but still unsolved. In other Activity (ViewCategory and AddCategory) I'm doing the same things (transfer data from ViewCategory to AddCategory) its working well and there's no error when I run AddCategory directly but the code is exactly have same pattern with the two Activity which I got the error.

Please master help me. Thanks before.

The error report gimme this one:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.Bundle.getBoolean(java.lang.String)' on a null object reference at com.example.ever_ncn.cashflow.NewTransaction.onCreate(NewTransaction.java:68)

NB. This my code for first 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); } } 

And this one for second Activity (NewTransaction)

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

here is my code for CategorySetting/ViewCategory (another Activity that work with this pattern of code) :

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

and this one for 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); } } 

回答1:

This is happen because when you start your second activity NewTransaction directly you don't put extras in the intent, so when you call getIntent().getExtras(); it returns a null object and this is why getIntent().getExtras().getBoolean("update"); throw the NPE.

As solution: try to check if getIntent().getExtras() != null before getting the data, this will fix your problem.

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


回答2:

Try this in your ViewCashFlow class:

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


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!