【问题标题】:Cant pass Context in getInstance()无法在 getInstance() 中传递上下文
【发布时间】:2020-04-18 12:28:31
【问题描述】:

我的 AppController.java

package com.lol.triviaagain.controller;

import android.app.Application;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.LruCache;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;

public class AppController extends Application {

    private static AppController instance;
    private RequestQueue requestQueue;
    private ImageLoader imageLoader;
    private static Context ctx;

    private AppController(Context context) {
        ctx = context;
        requestQueue = getRequestQueue();

        imageLoader = new ImageLoader(requestQueue,
                new ImageLoader.ImageCache() {
                    private final LruCache<String, Bitmap>
                            cache = new LruCache<String, Bitmap>(20);

                    @Override
                    public Bitmap getBitmap(String url) {
                        return cache.get(url);
                    }

                    @Override
                    public void putBitmap(String url, Bitmap bitmap) {
                        cache.put(url, bitmap);
                    }
                });
    }

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

    public RequestQueue getRequestQueue() {
        if (requestQueue == null) {
            // getApplicationContext() is key, it keeps you from leaking the
            // Activity or BroadcastReceiver if someone passes one in.
            requestQueue = Volley.newRequestQueue(ctx.getApplicationContext());
        }
        return requestQueue;
    }

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

    public ImageLoader getImageLoader() {
        return imageLoader;
    }
}

我的questionbank.java

package com.lol.triviaagain.model;
import android.app.Activity;
import android.content.Context;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.lol.triviaagain.MainActivity;
import com.lol.triviaagain.controller.AppController;

import org.json.JSONArray;
import org.json.JSONException;

import java.util.ArrayList;
import java.util.List;

public class questionbank {

    public ArrayList<questions> questionbank = new ArrayList<>();
    String url = "https://raw.githubusercontent.com/curiousily/simple-quiz/master/script/statements-data.json";
    public List<questions> questionsList()
    {
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method
                .GET, url, (JSONArray) null, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {

                for (int i=0;i<response.length();i++)
                {
                    try {
                        response.getJSONArray(i).get(0).toString();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
        AppController.getInstance(this).addToRequestQueue(jsonArrayRequest);//Error here
        return null;
    }


    }

我应该在 getInstance() 中添加什么?我试过 This/Mainactivity.this 但没有用。 如果我输入“This”,我会得到“getInstance (Android.content.context) 无法应用于 Appcontroller (com.android.triviaagain.model.questionbank)。”如果您需要有关其他任何信息的更多信息,请告诉我。

提前致谢

【问题讨论】:

    标签: java android arrays json


    【解决方案1】:

    Contextactivityfragmentapplication 相关。你不能在标准的java类中拥有它。您应该将您的 AppController 实例作为参数传递给您的 questionList 方法。

    public List<questions> questionsList(controller : AppController){
      // previous stuff here
      controller.addToRequestQueue(jsonArrayRequest);
      return null;
    }
    

    这也有助于提高你的类可测试性。

    【讨论】:

    • 好的,我按照你说的做了,我在这里得到一个“,”预期的错误 -->(控制器:AppController)`
    • addtorequestqueue 不起作用,错误是“无法解析方法`addtorequestqueue(com.android.volley.toolbox.jsonarrayrequest)”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 2015-03-23
    • 2015-02-03
    • 1970-01-01
    相关资源
    最近更新 更多