【问题标题】:Attempt to invoke virtual method null object reference尝试调用虚方法空对象引用
【发布时间】:2021-11-07 15:36:50
【问题描述】:

主要活动:

    TextView tvDescription;
    ArrayList<String> descriptions;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvDescription = (TextView)findViewById(R.id.tvDescription);

        descriptions = new ArrayList<>();
        descriptions.add("Description for item 1");
        descriptions.add("Description for item 2");
        descriptions.add("Description for item 3");
    }

    @Override
    public void onItemSelected(int index) {

        tvDescription.setText(descriptions.get(index));
    }
}

activity_main.xml:

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

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/listFrag"
        android:name="com.example.fragmentsvideo2018.ListFrag"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        tools:layout="@layout/fragment_list" />

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/detailFrag"
        android:name="com.example.fragmentsvideo2018.DetailFrag"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2"
        tools:layout="@layout/fragment_detail" />
</LinearLayout>

列表片段:

ItemSelected activity;

public interface ItemSelected
{
    void onItemSelected (int index);
}

public ListFrag() {
    // Required empty public constructor
}

@Override
public void onAttach(@NonNull Context context) {
    super.onAttach(context);

    activity = (ItemSelected) context;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    ArrayList<String> data = new ArrayList<String>();
    data.add("1.This is item 1");
    data.add("2.This is item 2");
    data.add("3.This is item 3");

    setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, data));
    activity.onItemSelected(0);
}

@Override
public void onListItemClick(@NonNull ListView l, @NonNull View v, int position, long id) {

    activity.onItemSelected(position);
}

}

fragment_list.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ListFrag">

    <ListView
        android:id="@+id/lvLIst"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>


Detail Frag:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_detail, container, false);
    }
}

fragment_deal.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/design_default_color_primary"
    android:orientation="vertical"
    tools:context=".DetailFrag">


    <TextView
        android:id="@+id/tvDescription"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginRight="20dp"
        android:text="@string/textview"
        android:textColor="#FFFFFF"
        android:textSize="18sp" />
</LinearLayout>

错误:

2021-09-11 16:27:03.357 29251-29251/com.example.fragmentsvideo2018 E/AndroidRuntime: 致命异常: main 进程:com.example.fragmentsvideo2018,PID:29251 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.TextView.setText(java.lang.CharSequence)” 在 com.example.fragmentsvideo2018.MainActivity.onItemSelected(MainActivity.java:30) 在 com.example.fragmentsvideo2018.ListFrag.onActivityCreated(ListFrag.java:52) 在 androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2996) 在 androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:580) 在 androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:285) 在 androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112) 在 androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647) 在 androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128) 在 androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:3072) 在 androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:251) 在 androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:502) 在 androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:246) 在 android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1435) 在 android.app.Activity.performStart(Activity.java:8024) 在 android.app.ActivityThread.handleStartActivity(ActivityThread.java:3475) 在 android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) 在 android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) 在 android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

我尝试在此站点和其他站点中进行搜索,但没有找到解决方案。 也许我做错了什么,因为我只是一个初学者。 请帮帮我!!

【问题讨论】:

    标签: nullpointerexception null


    【解决方案1】:

    据我从您提供的代码中可以看出,问题在于 xml 文件。您尝试从 ActivityMain.java 中通过 findViewById() 获取 TextView,但 TextView 是在 fragment_deal.xlm 中声明的。据我所知,findViewById 只查找在与 java 文件调用关联的 xml 文件中声明的组件。

    【讨论】:

    • 我正在学习片段,因为正如我所说,我是一个初学者,并且在视频中,讲师会这样做。如果我尝试在 DetailFRag 中使用 findbyid,我会收到 android studio 的错误。我已经看了两遍视频并且做了同样的所有事情,但对我来说它不起作用,而对教练来说它起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多