Java 在片段中创建视图时,从EditText获取字符串时出现空指针异常

Java 在片段中创建视图时,从EditText获取字符串时出现空指针异常,java,android,fragment,Java,Android,Fragment,当从EditText获取字符串时,我得到一个空指针异常。是否因为我使用的是片段,我应该使用异步任务?我不知道为什么会这样。我在添加s1=text1.getText().toString()时出错行 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/Lin

当从EditText获取字符串时,我得到一个空指针异常。是否因为我使用的是片段,我应该使用异步任务?我不知道为什么会这样。我在添加
s1=text1.getText().toString()时出错

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.tromto.analyzevalue.MainActivity$PlaceholderFragment" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="numberDecimal" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

 </LinearLayout>



public class MyFragment1 extends Fragment {
    EditText text1;
    Button button1;
    String s1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);

        Toast t = Toast.makeText(getActivity(), "Section 1", Toast.LENGTH_LONG);
        t.show();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        final View v = inflater.inflate(R.layout.fragment_main, container, false);

        text1 = (EditText)getActivity().findViewById(R.id.editText1);
        s1 = text1.getText().toString();

        return v;
    }
}

公共类MyFragment1扩展了片段{
编辑文本1;
按钮1;
字符串s1;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
设置选项菜单(真);
Toast t=Toast.makeText(getActivity(),“Section 1”,Toast.LENGTH\u LONG);
t、 show();
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
最终视图v=充气机。充气(右布局。主容器碎片,假);
text1=(EditText)getActivity().findViewById(R.id.editText1);
s1=text1.getText().toString();
返回v;
}
}

我刚才回答了类似的问题。开始时EditText1中的值为空。不要在创建时使用此解决方案,如果必须,也不要在其中填充一些文本。

您正试图从片段的父活动
查找dviewbyid
。相反,您应该在片段的视图中找到dviewbyd

使用:

而不是:

text1 = (EditText)getActivity().findViewById(R.id.editText1);

虽然这个答案是正确的,但考虑到事实,您的编辑文本将有一个空值(或其默认值)在这一点上。没有评论,只是一个注释。默认值不会在这一行导致错误,但在这之后可能会导致问题。因此,我应该将编辑文本放在哪里以听取用户的值。我应该执行异步任务还是最好的过程是什么?这是另一个问题,但无论如何,您只需将OnClickListener设置为按钮并从中获取EditText的值。我确实设置了一个按钮以获取EditText的值,但正如@Knickedi所预测的,EditText的值为空。
text1 = (EditText)getActivity().findViewById(R.id.editText1);