【问题标题】:EditText.setText() Null Pointer ExceptionEditText.setText() 空指针异常
【发布时间】:2014-08-21 00:56:23
【问题描述】:

我有这个让我发疯的 NPE,也许它只是“隧道视觉”,但我无法解决它。我在活动中有一个片段,在活动的onCreate() 中我实例化了片段。然后稍后当片段添加到活动中时,我从活动中调用片段方法。代码如下

transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.ActionInputFragment, settingsFragment).addToBackStack(null);
transaction.commit();

if(jsonUserData != null)
  settingsFragment.loadUserData(jsonUserData);

在我拥有的片段中:

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        this.ctx = getActivity();

    edtFullName = (EditText) getActivity().findViewById(R.id.edtFullNameSettings);

    edtFullName.addTextChangedListener(new TextWatcher .....);
}

添加 textwatcher 有效。下面(在同一个片段中)是其调用产生错误的方法:

public void loadUserData(JSONObject jsonUserData) {
        String fullName;
        try {
            fullName = String.format("%s %s", jsonUserData.getString("first_name"), jsonUserData.getString("last_name"));
        } catch (JSONException e) {
            fullName = "";
        }
        //if(edtFullName != null)
            this.edtFullName.setText(fullName);

    }

我已经检查了布局并且 editText id 在那里。

【问题讨论】:

    标签: android nullpointerexception android-edittext


    【解决方案1】:

    问题是this.edtFullName 还没有初始化,因为onActivityCreated 还没有被调用,因此edtFullName 在调用setText() 方法时为空

    您可以在loadUserData 中传递EditText 的引用而不是在onActivityCreated

    【讨论】:

    • 我想我明白了。非常感谢。我无法传递引用,但我可以通过将工作带到片段来使方法调用变得不必要。谢谢你。我会尽快接受你的回答,但考虑为未来的访问者扩展一点:D
    • @Rod_Algonquin 如何将edittext的引用传递给该方法?
    猜你喜欢
    • 2015-07-12
    相关资源
    最近更新 更多