Java Android.os.Bundle 上的 NullPointerException

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/32031178/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 11:56:26  来源:igfitidea点击:

NullPointerException On Android.os.Bundle

javaandroidandroid-intentandroid-activity

提问by iWayan

I have some problem with my code, when I need to transfer some data from one Activityto another one. First Activity(ViewCashflow) and I want transfer some data from ViewCashflowto 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 Activitydirectly (not from first Activitylike before when I transfer the data) I got null pointer exception on the method that I use to receive the data from first Activity.

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

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

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

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)

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

NB. This my code for first Activity(ViewCashflow)

注意。这是我的第一个代码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<String> arrTransId = new ArrayList<String>();
private ArrayList<String> arrTransName = new ArrayList<String>();
private ArrayList<String> arrTransAmount = new ArrayList<String>();
private ArrayList<String> arrTransType= new ArrayList<String>();
private ArrayList<String> arrTransDate= new ArrayList<String>();
private ArrayList<String> arrCategId= new ArrayList<String>();
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)

而这一秒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);
}
}

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

这是我的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<String> arrCategId = new ArrayList<String>();
private ArrayList<String> arrCategName = new ArrayList<String>();
private ArrayList<String> arrCategNote = new ArrayList<String>();
private ArrayList<String> arrCategCurr = new ArrayList<String>();
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:

而这一个AddCategory

public class AddCategory extends ActionBarActivity {
private static Button BtnIAdd;
private static Button BtnICancel;
EditText txtcategname, txtType;
Spinner selectCurrency;
ArrayAdapter<CharSequence> 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);
}
}

采纳答案by Rami

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

这是发生,因为当你开始你的第二个活动NewTransaction直接与你不把你extrasintent,所以当你调用getIntent().getExtras();它返回一个null对象,这就是为什么getIntent().getExtras().getBoolean("update");抛出NPE

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

作为解决方案:尝试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);
       }
    }

回答by MusaddiqAkhtar

Try this in your ViewCashFlow class:

在您的 ViewCashFlow 类中试试这个:

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

回答by Gehad abdelfatah

if it in fragment you can use :

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

if (getArguments() != null) {

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

    }