Java Android ShoppingList主详细信息流
我正在尝试使用主细节流制作购物清单。 但是当我试图保存一篇文章时,当我试图读取我在DetailFragment中的EditText时,我会得到一个NullPointerException。 这是我的DetailFragment类Java Android ShoppingList主详细信息流,java,android,master-detail,Java,Android,Master Detail,我正在尝试使用主细节流制作购物清单。 但是当我试图保存一篇文章时,当我试图读取我在DetailFragment中的EditText时,我会得到一个NullPointerException。 这是我的DetailFragment类 public class ItemDetailFragment extends Fragment{ int id = 0; private EditText name, amount, comment; private CheckBox done; public st
public class ItemDetailFragment extends Fragment{
int id = 0;
private EditText name, amount, comment;
private CheckBox done;
public static final String ARG_ITEM_ID = "item_id";
private ItemContent.Item mItem;
public ItemDetailFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments().containsKey(ARG_ITEM_ID)) {
mItem = ItemContent.ITEM_MAP.get(getArguments().getString(ARG_ITEM_ID));
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_item_detail, container, false);
if (mItem != null) {
name = (EditText) rootView.findViewById(R.id.editName);
name.setText(mItem.getName());
amount = (EditText) rootView.findViewById(R.id.editAmount);
amount.setText(mItem.getAmount());
comment = (EditText) rootView.findViewById(R.id.editComment);
comment.setText(mItem.getComment());
done = (CheckBox) rootView.findViewById(R.id.checkDone);
done.setChecked(mItem.getDone());
}
return rootView;
}
public void save(){
id++;
String idSave = id + "";
String nameSave = name.getText().toString();
String amountSave = amount.getText().toString();
String commentSave = comment.getText().toString();
Boolean doneSave;
if(done.isChecked())
doneSave =true;
else
doneSave = false;
mItem.setId(idSave);
mItem.setName(nameSave);
mItem.setAmount(amountSave);
mItem.setComment(commentSave);
mItem.setDone(doneSave);
ItemContent ic = new ItemContent();
ic.addItem(mItem);
}
}
这是我的活动课
public class ItemDetailActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item_detail);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if (savedInstanceState == null) {
Bundle arguments = new Bundle();
arguments.putString(ItemDetailFragment.ARG_ITEM_ID, getIntent().getStringExtra(ItemDetailFragment.ARG_ITEM_ID));
ItemDetailFragment fragment = new ItemDetailFragment();
fragment.setArguments(arguments);
getSupportFragmentManager().beginTransaction().add(R.id.item_detail_container, fragment).commit();
}
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_detail, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.save:
ItemDetailFragment idf = new ItemDetailFragment();
idf.save();
break;
case R.id.cancel:
this.finish();
break;
case R.id.home:
NavUtils.navigateUpTo(this,new Intent(this, ItemListActivity.class));
break;
}
return super.onOptionsItemSelected(item);
}
}
这就是问题所在。当我在列表中选择一个对象时,我可以让EditItem显示所选列表元素中的字符串,但我无法将EditText中的文本转换为字符串
03-13 13:05:45.760: E/AndroidRuntime(451): FATAL EXCEPTION: main
03-13 13:05:45.760: E/AndroidRuntime(451): java.lang.NullPointerException
03-13 13:05:45.760: E/AndroidRuntime(451): at com.example.list.ItemDetailFragment.save(ItemDetailFragment.java:53)
03-13 13:05:45.760: E/AndroidRuntime(451): at com.example.list.ItemDetailActivity.onOptionsItemSelected(ItemDetailActivity.java:37)
有人能看出我做错了什么,或者我应该用完全不同的方式来做吗?例外情况出现在第
53行(itemdailfragment.java:53),代码中的哪一行?idf.save();项内详细信息活动和项内详细信息片段字符串nameSave=name.getText().toString();尝试调试代码,name
或name.getText()
在您的情况下为空。首先找到什么是空的,然后如果name
为空,那么检查它为什么为空,如果name.getText()
为空,那么在执行toString()
之前,首先对name.getText()
进行空检查。正是name具有空值。我猜是因为它与视图中的编辑文本没有关联。然后在onCreateView
中检查代码。为什么它是空的。。如果期望值为null,那么您需要在您的代码中添加null check。。。