Java 通货膨胀后出现空指针异常?

Java 通货膨胀后出现空指针异常?,java,android,android-fragments,android-studio,Java,Android,Android Fragments,Android Studio,下面是我的代码片段,我试图在视图中设置textView的文本,我的印象是,只要先膨胀视图,它就不会返回null,因为它已经创建。根据碎片的生命周期 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View loginFragmentView = inflater.inflate(R.layou

下面是我的代码片段,我试图在视图中设置textView的文本,我的印象是,只要先膨胀视图,它就不会返回null,因为它已经创建。根据碎片的生命周期

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View loginFragmentView = inflater.inflate(R.layout.login_layout, container, false);
        TextView imei = (TextView) loginFragmentView.findViewById(R.id.txt_device_id);
        imei.setText("IMEI: ");
        return loginFragmentView;
    }
这确实会导致应用程序因nullPointerException而崩溃,但有人知道如何避免这种情况吗。是否有一种方法我可以重写,它只在片段生命周期结束后调用一次

我还尝试将它放在onResume()中,因为它正好在生命周期的末尾,但得到了相同的结果。有什么想法吗

编辑

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Your device ID:"
        android:id="@+id/txt_id_title"
        android:layout_marginTop="15dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Fetching ID..."
        android:id="@+id/txt_device_id"
        android:layout_below="@+id/txt_id_title"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

您的问题是因为您根据片段lifycle过早地声明了TextView,因此,与其在
onCreateView
中声明它,不如在
onViewCreated
中声明它,因此它将是:

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View loginFragmentView = inflater.inflate(R.layout.login_layout, container, false);
        return loginFragmentView;
    }


  @Override
  public void onViewCreated(View loginFragmentView, Bundle savedInstanceState) {
      super.onViewCreated(view, savedInstanceState);

      TextView imei = (TextView) loginFragmentView.findViewById(R.id.txt_device_id);
      imei.setText("IMEI: ");
  }

查看您的stacktrace,我猜您的loginFragmentView没有id为txt\u device\u id的textview类型的子项,因此请检查在充气方法中是否传递了正确的布局名称,其中包含您试图查找的id为textview的textview

确保
login\u layout
layout.your stacktrace?!你从哪里得到npe?错误的,我重新编辑了。仍然返回空指针:(与上面完全相同。文本视图的名称是
txt\u id\u title
而不是
txt\u device\u id
在它下面查看,不要与下面的android:layout\u混淆,因此,请确保运行此文本的布局是什么,如果您根据宽度提供的不仅仅是布局,比如
layout-sw600dp
,那么您可能没有提供此文本查看此布局内的视图。哇!天哪,我是瞎的。它肯定在那里。请查看有问题的布局标记。您可以通过在TextView imei=(TextView)loginFragmentView.findViewById(R.id.txt\u device\u id)处放置断点来检查loginViewFragment是否包含该视图。并计算表达式。检查loginViewFragment的子项
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View loginFragmentView = inflater.inflate(R.layout.login_layout, container, false);
        return loginFragmentView;
    }


  @Override
  public void onViewCreated(View loginFragmentView, Bundle savedInstanceState) {
      super.onViewCreated(view, savedInstanceState);

      TextView imei = (TextView) loginFragmentView.findViewById(R.id.txt_device_id);
      imei.setText("IMEI: ");
  }