私は StackOverflow を見回しましたが、私の問題のようなものを見つけることができませんでした。複数の質問で同様の問題について読みましたが、それらはすべてインテント内の単一の追加に関するものでした。私の問題は、2 番目のアクティビティからメイン アクティビティに返されたインテント内のエクストラのバンドルに関するものです。
主な活動に関連するスニップは次のとおりです。
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), addItem.class);
startActivityForResult(intent, 1);
}
});
と:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
System.out.println("REQUEST CODE:" + requestCode);
super.onActivityResult(requestCode, resultCode, data);
Bundle extras = data.getExtras();
String item_name = extras.getString("ITEM_NAME");
int item_price = extras.getInt("ITEM_PRICE");
int item_qty = extras.getInt("ITEM_QTY");
ListView list = (ListView) findViewById(R.id.listView);
ArrayList<String> arrayList = new ArrayList<String>();
ArrayAdapter<String> adapter;
adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, arrayList);
list.setAdapter(adapter);
arrayList.add(item_name);
adapter.notifyDataSetChanged();
}
2 番目のアクティビティの抜粋:
public class addItem extends AppCompatActivity{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_item);
Button btn1 = (Button)findViewById(R.id.button);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addToList();
}
});
}
public void addToList(){
Intent inty = new Intent();
Bundle extras = new Bundle();
EditText txt1 = (EditText)findViewById(R.id.textItem);
String name = txt1.getText().toString();
extras.putString("ITEM_NAME", name);
EditText txt2 = (EditText)findViewById(R.id.textPrice);
int price = Integer.parseInt(txt2.getText().toString());
extras.putInt("ITEM_PRICE", price);
EditText txt3 = (EditText)findViewById(R.id.textNum);
int numb = Integer.parseInt(txt3.getText().toString());
extras.putInt("ITEM_QTY", numb);
setResult(RESULT_OK, inty);
finish();
}
}
より具体的には、ボタンを押して(3つのフォームから)データを送り返すと、アプリがクラッシュし、Androidスタジオから次のように通知されます。
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { }} to activity {it.cryosec.appname/it.cryosec.appname.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
私は何か間違っていましたか?