簡體   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