繁体   English   中英

如何在Android的片段中使用Volley?

[英]How to use Volley in fragments in Android?

我正在尝试使用Volley实现GET请求。 我在PlacementActivity中有一个“应用”按钮,该按钮将用户定向到具有片段的PlacementHomeActivity。 我已经在Apply.OnClickListener中实现了GET请求,并且从请求中接收到的数据必须显示在PlacementHomeActivity中。 但是我在这一行中得到一个空对象错误:

            SingletonRequestQueue.getInstance(PlacementActivity.context).addToRequestQueue(ArrayRequest);

(当使用Activity而不是Fragments时,此代码工作正常)

这是Apply.OnClickListener类的代码:

Apply.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        applyList = new ArrayList<Company>();
        JsonArrayRequest ArrayRequest = new JsonArrayRequest(Request.Method.GET, applyCompaniesUrl,
                null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        try {
                            for (int i = 0; i < response.length(); i++) {
                                JSONObject companies = response.getJSONObject(i);
                                String id = companies.getString("id");
                                JSONObject company = companies.getJSONObject("company");
                                Company company = new Company(id, company);
                                applyList.add(company);
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                        Intent applyListIntent = new Intent(PlacementActivity.this,
                                PlacementHomeActivity.class);
                        startActivity(applyListIntent);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(PlacementActivity.this, error.toString(), Toast.LENGTH_LONG).show();
                        StringWriter writer = new StringWriter();
                        error.printStackTrace(new PrintWriter(writer));
                        String s = writer.toString();
                    }
                }) {
            @Override
            public Map<String, String> getHeaders() {
                Map<String, String> params = new HashMap<String, String>();
                params.put("Cookie", "remember_user_token=" + userToken);
                return params;
            }
        };
        SingletonRequestQueue.getInstance(PlacementActivity.context).addToRequestQueue(ArrayRequest);
    }
});

这是SingletonRequestQueue类:

public class SingletonRequestQueue {

public static SingletonRequestQueue mInstance;
private RequestQueue mRequestQueue;
private static Context appContext;
public Context context;

private SingletonRequestQueue(Context context){
    appContext = context;
    mRequestQueue = getRequestQueue();
}

public static synchronized SingletonRequestQueue getInstance(Context context){
    if(mInstance==null) {
        mInstance = new SingletonRequestQueue(context);
    }
    return mInstance;
}

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

public <T> void addToRequestQueue(Request<T> request){
    getRequestQueue().add(request);
}
}

如何解决此错误?

似乎是一个上下文问题,请尝试将PlacementActivity.context替换为getApplicationContext()

SingletonRequestQueue.getInstance(Context.getApplicationContext()).addToRequestQueue(ArrayRequest);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM