gpt4 book ai didi

java - 无法在 getInstance() 中传递 Context

转载 作者:行者123 更新时间:2023-12-02 08:42:31 24 4
gpt4 key购买 nike

我的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;
}
}

我的问题库.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) ”。如果您需要有关其他内容的更多信息,请告诉我。

提前致谢

最佳答案

上下文 Activity fragment 应用程序相关。你不能在标准的 java 类中拥有它。您应该将 AppController 实例作为参数传递给 questionList 方法。

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

这对于提高类的可测试性也很有好处。

关于java - 无法在 getInstance() 中传递 Context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61289070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com