当前位置: 首页 > 面试题库 >

Volley AppController类对象返回null

云欣嘉
2023-03-14
问题内容

我正在制作一个应用,该应用JsonObjectRequest使用Volley Networking Library for Android从URL获取a
并从其中检索JSON数据。

AppController.java

public class AppController extends AppCompatActivity {

    public static final String TAG = AppController.class.getSimpleName();

    private RequestQueue mRequestQueue;

    private static AppController mInstance;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mInstance = this;
    }

    public static synchronized AppController getInstance(){
        return mInstance;
    }

    public RequestQueue getRequestQueue(){
        if(mRequestQueue == null){
            mRequestQueue = Volley.newRequestQueue(getApplicationContext());
        }

        return mRequestQueue;
    }

    public <T> void addToRequestQueue(Request<T> req) {
        req.setTag(TAG);
        getRequestQueue().add(req);
    }
}

MainActivity.class中的方法

private void makeJSONObjectRequest() {

        showDialog();

        JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET,
                urlJsonObj, (String) null, new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                Log.d(TAG, response.toString());

                try {

                    //Parsing JSON Object response
                    String name = response.getString("name");
                    String email = response.getString("email");
                    JSONObject phone = response.getJSONObject("phone");
                    String home = phone.getString("home");
                    String mobile = phone.getString("mobile");

                    jsonResponse = "";
                    jsonResponse += "Name: " + name + "\n\n";
                    jsonResponse += "Email: " + email + "\n\n";
                    jsonResponse += "Home: " + home + "\n\n";
                    jsonResponse += "Mobile: " + mobile + "\n\n";

                    txtResponse.setTag(jsonResponse);

                }

                catch (JSONException e) {
                    e.printStackTrace();
                    Toast.makeText(getApplicationContext(), "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
                }

                hideDialog();
            }
        },

        new ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                VolleyLog.d(TAG+"Error:"+ volleyError.getMessage());
                Toast.makeText(getApplicationContext(), volleyError.getMessage(), Toast.LENGTH_SHORT).show();
                hideDialog();
            }
        });

        /*THE ERROR OCCURS HERE! */
        //adding request to the RequestQueue
        AppController.getInstance().addToRequestQueue(jsonObjReq);
    }

它给出以下错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.h8pathak.volleyjson.AppController.addToRequestQueue(com.android.volley.Request)' on a null object reference

我该如何纠正此代码?


问题答案:

AppController class需要扩展Application类而不是AppCompatActivity类。

并记住也要更新清单。即。使用name属性作为<application>标签,在您的AndroidManifest.xml中添加此类。

<application
        android:name=".AppController"/>


 类似资料:
  • 注意:请通读后再回答。这看起来是一个简单的问题,但我不确定它是否如此简单。另外,我是打字新手,所以对我宽容点 所以这是用例。我有一个模型用户,我编写了一个通用函数来根据数据库中的电子邮件检查用户是否存在。如果存在,则返回用户对象。 现在,如果它是任何其他对象,那么我可以定义类型并继续我的代码,但它是我从DB得到的用户对象,不知道如何解决这个问题。 我通过提到返回类型“any”找到了解决方法,但我的

  • 我使用mysql存储过程来检索对象列表。这可能吗? 我在看这篇文章 问题: > 如何使用结果集检索select语句中的对象列表? 如何将结果集映射到对象列表? CREATE DEFINER=@PROCEDURE(ININT,OUTINT,OUTINT,OUTVARCHAR(50),OUTVARCHAR(50),OUTFLOAT 内部连接(从rate中选择aid,r.rate,re.country_

  • 问题内容: 对于一个抽象类,我想定义一个为子类返回“ this”的方法: 我希望能够执行以下操作: 可以说香蕉面包会抛出一个IllegalArgumentException消息“不是蛋糕!”。 问题答案: 编辑 要求子类以某种方式表现是没有问题的,这超出了静态类型可以检查的范围。我们一直在这样做-一页又一页的普通英语指定您如何编写子类。 提出的另一种具有协变返回类型的解决方案必须做同样的事情-用简

  • 问题内容: 如果不是原始类型,返回类型的正确方法是什么?例如。我目前使用null如下。 问题答案: Void类是一个无法实例化的占位符类,用于保存对表示Java关键字void的Class对象的引用。 因此,以下任何条件就足够了: 参数化并返回或 参数化并返回 用您的一个参数化 你不能让这种方法,和其他任何回报 的东西 。由于忽略了某些内容,因此您可以返回任何内容。

  • 问题内容: 我定义了以下工厂: 而我的控制器: 这是console.log: 上面的代码返回一个状态对象,而不是用户对象。但是从日志来看,状态对象的用户对象在值之内。我如何获得用户对象?还是我这样做完全错误? 我知道另一种方法是返回$http.get并在控制器内调用then()方法。但是我会经常使用用户对象,如果我在控制器中调用then()方法,它几乎与在控制​​器而不是工厂中使用$http.ge

  • 我开始进入WP开发,我有问题与ACF后对象返回空,我不知道为什么。我创建了一个ACF,分类法的位置等于类别然后字段设置为... 字段名称:推荐的\u资源 然后在岗位上 我得到了无效的任何帮助或指向正确的方向都是非常感谢的。