Java Android ShoppingList主详细信息流

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

我正在尝试使用主细节流制作购物清单。 但是当我试图保存一篇文章时,当我试图读取我在DetailFragment中的EditText时,我会得到一个NullPointerException。 这是我的DetailFragment类

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。。。