已经指定参数的方法中如何实现class?

How to implement a class in a method when it already has a parameter to be specified?

所以我正在学习 Android Studio 的 Udemy 教程并制作一个琐事应用程序。所以这是交易: 这是一个文件 QuestionBank.java:

package com.example.triviaapp.data;

import android.content.Context;
import android.util.Log;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.Volley;
import com.example.triviaapp.controller.AppController;
import com.example.triviaapp.models.Question;

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

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

import static android.content.ContentValues.TAG;

public class QuestionBank {

    ArrayList<Question> questionArrayList = new ArrayList<>();

    private String url = "https://raw.githubusercontent.com/curiousily/simple-quiz/master/script/statements-data.json";


    public List<Question> getQuestions(Context context){
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(
                Request.Method.GET,
                url,
                (JSONArray) null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, "onResponse: " + response);
                        for (int i = 0; i >= response.length(); i ++){
                            try {
                                questionArrayList.add(new Question(response.getJSONArray(i).getString(0),response.getJSONArray(i).getBoolean(1)));
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });
        AppController.getInstance(context).addToRequestQueue(jsonArrayRequest);
        return questionArrayList;
    }

}

如您所见,当我在 Main activity 中调用它时,我需要提供上下文 (this)。 这行

AppController.getInstance(context).addToRequestQueue(jsonArrayRequest);

本来就是

AppController.getInstance().addToRequestQueue(jsonArrayRequest);

正如老师所说,但我遇到了getInstance需要上下文的错误。感谢 SO,我找到了解决方案,并进行了更改(AppController 是单例 class btw)。

因此,我需要在 运行 时从 MainActivity 获取上下文,并且必须更改它

public List getQuestions(){

对此:

public List getQuestions(Context context){

问题已解决! (然而老师并没有报错,不知道为什么。)

然后在稍后的视频中,他说我们需要 getQuestions() 来实现 class 最终的 AnswerListAsyncResponse 回调。

所以我修改的那行应该是这样的:

public List getQuestions(final AnswerListAsyncResponse callback){

虽然我的括号里已经有Context上下文了。我该怎么办?

您可以将多个参数传递给一个函数。

在你的情况下,你可以像这样传递上下文和回调

public List getQuestions(Context context, final AnswerListAsyncResponse callback){}