gpt4 book ai didi

java - Volley 示例错误不在 MainActivity 中

转载 作者:行者123 更新时间:2023-12-01 18:04:29 25 4
gpt4 key购买 nike

我正在尝试通过 Volley 运行一个简单的 HTTP 查询,并且此代码在 onCreate() 下的默认 Android MainActivity 中运行完全正常:

JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.GET, url, (String)null, new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response) {
// the response is already constructed as a JSONObject!
try {
// response = response.getJSONObject("results");
String success = response.getString("success"),
status = response.getString("status");

if(status.equals("1"))
{
GlobalVar.armedStatus = 1;
}
else if(status.equals("0"))
{
GlobalVar.armedStatus = 0;
}

System.out.println("Success: "+success+"\nStatus: "+status);
} catch (JSONException e) {
e.printStackTrace();
}


}
}, new Response.ErrorListener() {

@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
// RequestQueue queue = Volley.newRequestQueue(jsonRequest);
Volley.newRequestQueue(this).add(jsonRequest);

当我在单独的类中运行此代码时,最后一行给出了错误。

Volley.newRequestQueue(this).add(jsonRequest);

newRequestQueue 上的错误是“无法解析符号 'newRequestQueue'”,add(jsonRequest); 上的错误是“缺少方法主体,或声明抽象。”

任何帮助将不胜感激,不知道为什么它在 Activity 中起作用,但在类文件中不起作用...我认为原因是 onCreate(),但我确信有某种方法可以将其保留在另一个中类?

最佳答案

这是因为在该行中:

Volley.newRequestQueue(this).add(jsonRequest);

您传递给 newRequestQueue()this 需要是一个 Android 上下文。当您从 Activity 调用它时,this 指的是属于 Context 类型的 Activity。当您从自己的类中调用 if 时,它将引用该类,该类不是上下文。

您有几种不同的选择:

添加上下文作为对象的构造函数参数

您可以拥有它,这样当您创建类的实例时,您必须传递您所持有的上下文。当您调用 Volley 时,将使用它:

public class MyClass {

private Context context;

public MyClass(Context context) {
this.context = context;
}

public void doVolleyRequest() {

//...
Volley.newRequestQueue(context).add(jsonRequest);
}

}

然后,当您从 Activity 中创建类时,您必须像这样实例化它:

MyClass myClass = new MyClass(this);

对应用程序上下文有静态引用

您可以拥有对应用程序上下文的静态引用,该引用可以从您的应用程序类访问。要在您的应用程序类中执行此操作,请执行以下操作:

public class App extends Application {

private static Context context;

@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}

public static Context getContext() {
return context;
}
}

然后从您使用 Volley 的类(class):

Volley.newRequestQueue(App.getContext()).add(jsonRequest);

拥有一个应用程序范围的请求队列

相反,您可以在 Application 类中设置一个请求队列并将所有请求添加到其中:

public class App extends Application {

private static RequestQueue requestQueue;

@Override
public void onCreate() {
super.onCreate();
requestQueue = Volley.newRequestQueue(getApplicationContext());
}

public static RequestQueue getRequestQueue() {
return requestQueue;
}
}

然后在你的类(class)中:

App.getRequestQueue().add(jsonRequest);

关于java - Volley 示例错误不在 MainActivity 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37778372/

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