已经指定参数的方法中如何实现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){}
所以我正在学习 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){}