gpt4 book ai didi

java.util.Objects.requireNonNull 处的 java.lang.NullPointerException

转载 作者:行者123 更新时间:2023-12-05 00:00:05 28 4
gpt4 key购买 nike

在我的代码中,我从一个 Activity 中调用一个函数addFood

postFood f = new postFood();
f.addFood(context, breakfastDate, breakfastSearch, 1);

然后代码运行下面的代码

public class postFood extends DialogFragment {
@SuppressLint("StaticFieldLeak")
private static Context context1;
@SuppressLint("StaticFieldLeak")
private static ListView dateList1, selectedList1;
private static ProgressDialog progressDialog;
private static int mealType1;
private static String TAG = "AddSelectedFood";
private static String date;
private static String time;
public static String[] dateTimeString;
public static Calendar cal;


public void addFood(Context context, ListView dateList, ListView selectedList,
int mealType) {
dateList1 = dateList;
selectedList1 = selectedList;
context1 = context;
mealType1 = mealType;
//*FragmentManager manager = Objects.requireNonNull(this.getActivity()).getSupportFragmentManager();

// Use the current date as the default date in the picker
new datePickerFragment().show(Objects.requireNonNull(getActivity()).getSupportFragmentManager(), "datePicker");
}
}

我该怎么做才能防止 getActivity().getSuppotFragmentManaget 为空?

这是我的日志

2019-01-15 12:08:37.898 7908-7908/com.example.khali.nutriplan E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.khali.nutriplan, PID: 7908
java.lang.NullPointerException
at java.util.Objects.requireNonNull(Objects.java:203)
at com.example.khali.nutriplan.postFood.addFood(postFood.java:63)
at com.example.khali.nutriplan.breakfastPage$1.onClick(breakfastPage.java:114)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access$3100(View.java:778)
at android.view.View$PerformClick.run(View.java:25885)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

最佳答案

好的,让我快速解释一下。 vaibhav kumar 在他的评论中提到的是正确的,但我认为您还没有完全理解它。这个想法是将 Context 从调用 Activity 传递到 Fragment。为什么?将 Fragment 视为可以在 Activity 内部动态使用的小型 UI 元素。在这里,我们来到第一件重要的事情:确保包含您的 fragment 的 Activity 不仅仅是一个 Activity,而是一个 FragmentActivity。 .现在,您可以做两件事:

  1. getFragmentManager() :返回 FragmentManager 以与与此 fragment 的 Activity 关联的 fragment 进行交互。请注意,在 fragment 被放置在 FragmentTransaction 中直到它被提交并附加到它的 Activity 期间,这将在 getActivity() 稍早之前为非空。 这不是您的选择,因为很明显,您的 Fragment 尚未被任何 Activity 使用。
  2. 使用您传递给 fragment 的上下文。它包含有关当前 Activity Activity 的信息。请记住,您的 fragment 仍然没有附加到它。所以你要做的是:context.getActivity(). getSupportFragmentManager()

这应该可以解决您的问题。始终保持不同states of a Fragment在脑海中以及它们如何影响其行为。例如,您的 fragment 甚至还没有附加。

关于java.util.Objects.requireNonNull 处的 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54195389/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com