0

アプリに問題があります。PetActivity という名前のアクティビティがあります。このアクティビティには、いくつかの値とボタン (更新) もあります。このボタンは、PetActivity の値を編集できる UpdateActivity という別のアクティビティにユーザーを切り替えます。このアクティビティを終了して PetActivity を再度開く保存ボタンがあります。このアクションでエラーが発生しました... (null ポインター例外)

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.project/com.example.project.PetActivity}: java.lang.NullPointerException

PetActivity onclick コード:

if (v.getId() == R.id.button1updateAP) {
        Intent i = new Intent(PetActivity.this, UpdateActivity.class);
        Bundle ext = getIntent().getExtras();
        String idOfPet = ext.getString(IDR);        
        i.putExtra(UpdateActivity.ID, idOfPet);         
        startActivity(i);
        finish();           
    }

UpdateActivity onclick コード:

if (v.getId() == R.id.button1saveAU) {
        MyDatabaseHelper db = new MyDatabaseHelper(this);

        Pet petU = new Pet();
        petU.setID(id);
        petU.setName(TVname.getText().toString());          
        petU.setAge((ETage.getText().toString()));
        petU.setWeight(ETweight.getText().toString());          
        db.updatePet(petU);
        db.close();

        DatabaseWeight dbw = new DatabaseWeight(this);          
        dbw.addPetWeight(new Pet(petU.getID(), petU.getWeight()));          

        Intent i2 = new Intent(this, PetActivity.class);
        startActivity(i2);
        finish();
    }

私がこれを試したとき、それは大丈夫でした:

Intent i2 = new Intent(this, ListActiv.class);
startActivity(i2);
finish();

このコードは私を List に切り替え、更新された PetActivity に移動できましたが、PetActivity に直接アクセスする必要があります。

どんな提案にもとても感謝しています。

ありがとう!

4

1 に答える 1

2

PetActivity から UpdateActivity を起動した後に finish() を呼び出す必要はなく、UpdateActivity 内で作業が完了したら、finish() の前に setResult() を呼び出すだけです...

コードは MainActivity の onClick 用である必要があります

if (v.getId() == R.id.button1updateAP) {
        Intent i = new Intent(PetActivity.this, UpdateActivity.class);
        Bundle ext = getIntent().getExtras();
        String idOfPet = ext.getString(IDR);        
        i.putExtra(UpdateActivity.ID, idOfPet);         
        startActivityForResult(i,some request code ););
        finish();           
    }

ChildActivityのonClick用

if (v.getId() == R.id.button1saveAU) {
        MyDatabaseHelper db = new MyDatabaseHelper(this);

        Pet petU = new Pet();
        petU.setID(id);
        petU.setName(TVname.getText().toString());          
        petU.setAge((ETage.getText().toString()));
        petU.setWeight(ETweight.getText().toString());          
        db.updatePet(petU);
        db.close();

        DatabaseWeight dbw = new DatabaseWeight(this);          
        dbw.addPetWeight(new Pet(petU.getID(), petU.getWeight()));          
        if(/*task completed successfully*/){
           setResult(RESULT_OK);
        }else{
           setResult(RESULT_CANCELED); 
        }
        finish();
    }

親アクティビティで、これらの値を内部で確認できますonActivityResult()

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.i(LOG_TAG, "Inside onActiviy Result : "+resultCode);
        if ( resultCode == RESULT_OK ) {
            Toast.makeText(this, "Update executed successfully..", Toast.LENGTH_SHORT).show();
        }else if ( resultCode == RESULT_CANCELED ) {
            Toast.makeText(this, "There was an error", Toast.LENGTH_SHORT).show();
        }
    }

ドキュメントのさまざまなインテントフラグも参照してください。

于 2012-12-18T10:24:00.670 に答える