java - 空对象引用上的 DialogFragment 'java.lang.String android.content.Context.getPackageName()'

标签 java android

我正在使用 DialogFragment 并使用 Volley 将数据插入 mysql。数据已成功插入数据库,但之后总是崩溃。我总是在 logcat java.lang.NullPointerException 中收到此错误:尝试在空对象引用上调用虚拟方法 'java.lang.String android.content.Context.getPackageName()' 错误出现在我的 Toast 中。请帮忙

public class ExpensesLeisureDialog extends DialogFragment {
EditText name, amount, details;
String nameHolder, amountHolder, detailsHolder;
Boolean CheckEditText;
RequestQueue requestQueue;

HashMap<String,String> hashMap = new HashMap<>();
String finalResult;
HttpParse httpParse = new HttpParse();
String HttpURL = "http://10.0.2.2:63343/TheMoneyger/api/add-leisure.php";

@Override
public Dialog onCreateDialog (Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();
    builder.setView(inflater.inflate(R.layout.fragment_add_expenses_dialog, null));
    requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
    builder.setTitle("Add leisure expense")
            .setPositiveButton("Add", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    name = (EditText) getDialog().findViewById(R.id.editText1);
                    amount = (EditText) getDialog().findViewById(R.id.editText2);
                    details = (EditText) getDialog().findViewById(R.id.editText3);

                    CheckEditTextIsEmpty();
                    StringRequest stringRequest = new StringRequest(Request.Method.POST, HttpURL,
                            new Response.Listener<String>() {
                                @Override
                                public void onResponse(String response) {
                                    Toast.makeText(getContext(), response, Toast.LENGTH_SHORT).show();
                                }
                            },
                            new Response.ErrorListener() {
                                @Override
                                public void onErrorResponse(VolleyError error) {
                                    Toast.makeText(getContext(), error.toString(), Toast.LENGTH_SHORT).show();
                                }
                            }) {
                        @Override
                        protected Map<String, String> getParams() {
                            Map<String, String> params = new HashMap<String, String>();
                            params.put("expensename", nameHolder);
                            params.put("expenseamount", amountHolder);
                            params.put("details", detailsHolder);
                            return params;
                        }
                    };

                    RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
                    requestQueue.add(stringRequest);
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
    return builder.create();
}

public void CheckEditTextIsEmpty() {
    nameHolder = name.getText().toString();
    amountHolder = amount.getText().toString();
    detailsHolder = details.getText().toString();
}

这是我的日志

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
                                                                                   at android.widget.Toast.<init>(Toast.java:114)
                                                                                   at android.widget.Toast.makeText(Toast.java:277)
                                                                                   at android.widget.Toast.makeText(Toast.java:267)
                                                                                   at com.example.merylle.themoneyger.fragment.ExpensesLeisureDialog$2$1.onResponse(ExpensesLeisureDialog.java:65)
                                                                                   at com.example.merylle.themoneyger.fragment.ExpensesLeisureDialog$2$1.onResponse(ExpensesLeisureDialog.java:62)
                                                                                   at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60)
                                                                                   at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
                                                                                   at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
                                                                                   at android.os.Handler.handleCallback(Handler.java:790)
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                   at android.os.Looper.loop(Looper.java:164)
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:6494)
                                                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                                                   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

最佳答案

更新

调用onAttach方法时存储上下文

public class ExpensesLeisureDialog extends DialogFragment {
       Context context;

       @Override
       public void onAttach(Context context) {
           super.onAttach(context);
           this.context = context;
       }
       .
       .
}

并在需要时使用上下文变量。

关于java - 空对象引用上的 DialogFragment 'java.lang.String android.content.Context.getPackageName()',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53112633/

相关文章:

Java OCR 实现

android - 在android中反转视频

Android EditText 结合 InputFilter vs TextWatcher

javascript - Android 中使用 Kotlin 和 Duktape 的 JS 扩展语法

android - 使用 MediaCodec 和 MediaExtractor 对视频进行解码编码

java - 更改 persistence.xml 以使用 PostgreSQL 而不是 MySQL

java - 如何像 Java 接口(interface)一样在 swift 中使用闭包

java - 如何根据用户输入使用 for 循环从数组打印字符串

java - Linux 中的 native 内存使用率似乎比通过 JVM 本身(例如通过 JConsole)观察到的要高得多

java - Java与Android的交互