Java 截击请求上的表达式预期错误
我在这一行的括号内得到一个名为expression expected的错误<代码>截取.newRequestQueue(MainActivity)代码>。这门课是在我的主要活动之外的另一个活动上。以下是我的代码片段:Java 截击请求上的表达式预期错误,java,android,android-volley,android-context,Java,Android,Android Volley,Android Context,我在这一行的括号内得到一个名为expression expected的错误截取.newRequestQueue(MainActivity)。这门课是在我的主要活动之外的另一个活动上。以下是我的代码片段: public void youFunctionForVolleyRequest(final ServerCallbackJava callback) { RequestQueue queue = Volley.newRequestQueue(MainActivity);
public void youFunctionForVolleyRequest(final ServerCallbackJava callback) {
RequestQueue queue = Volley.newRequestQueue(MainActivity);
String url = "https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&origins=22.2913,113.947&destinations=WanChai&mode=driving&key="REMOVED";
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
url, null, new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response) {
callback.onSuccess(response); // call call back function here
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//VolleyLog.d("Volley error json object ", "Error: " + error.getMessage());
}
})
{
@Override
public String getBodyContentType ()
{
return "application/json";
}
};
// Adding request to request queue
queue.add(jsonObjReq);
}
}
public void youFunctionForVolleyRequest(最终服务器回调Java回调){
RequestQueue=Volley.newRequestQueue(MainActivity);
字符串url=”https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&origins=22.2913,113.947&destinations=湾仔&mode=驾驶&key=“已删除”;
JsonObjectRequest JSONObjectReq=新的JsonObjectRequest(Request.Method.POST,
url,null,新响应。侦听器()
{
@凌驾
公共void onResponse(JSONObject响应){
callback.onSuccess(response);//此处为callback函数
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
//d(“截击错误json对象”,“错误:+error.getMessage());
}
})
{
@凌驾
公共字符串getBodyContentType()
{
返回“application/json”;
}
};
//将请求添加到请求队列
add(jsonObjReq);
}
}
在类截击请求中生成全局变量
Context context;
并在构造函数上初始化它
public VolleyRequests(Context mcontext) { this.context= mcontext; }
那就用这个
RequestQueue queue = Volley.newRequestQueue(context);
在MainActivity中调用时,请使用:
VolleyRequests volleyrequests = new VolleyRequests (this);
如果您的代码位于
活动.class
:
RequestQueue queue=Volley.newRequestQueue(this);//或
RequestQueue=Volley.newRequestQueue(Activity.this);//或
RequestQueue=Volley.newRequestQueue(getApplicationContext());
如果您的代码位于Fragment.class
:
RequestQueue queue=Volley.newRequestQueue(getContext());//或
RequestQueue=Volley.newRequestQueue(getApplicationContext());//或
RequestQueue=Volley.newRequestQueue(Fragment.this.getContext());//或
RequestQueue queue=Volley.newRequestQueue(Fragment.this.getApplicationContext());
在活动/片段中创建了一个类,调用该类时,必须将活动的上下文和相同的传递传递给此函数,并替换RequestQueue=Volley.newRequestQueue(MainActivity)使用RequestQueue queue=Volley.newRequestQueue(mContext);类中声明的上下文。您可以借助以下代码片段完成此操作:
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Button button = (Button)findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
request r = new request(Main2Activity.this);
r.youFunctionForVolleyRequest();
}
});
}
class request{
Context ctx;
public request(Context mContext) {
ctx = mContext;
}
public void youFunctionForVolleyRequest() {
RequestQueue queue = Volley.newRequestQueue(ctx);
String url = "https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&origins=22.2913,113.947&destinations=WanChai&mode=driving&key=";
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
url, null, new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response) {
// callback.onSuccess(response); // call call back function here
System.out.println("success");
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//VolleyLog.d("Volley error json object ", "Error: " + error.getMessage());
System.out.println("failed");
}
})
{
@Override
public String getBodyContentType ()
{
return "application/json";
}
};
// Adding request to request queue
queue.add(jsonObjReq);
}
}
}
公共类Main2活动扩展了AppCompative活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
按钮按钮=(按钮)findViewById(R.id.btn);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
请求r=新请求(Main2Activity.this);
r、 youFunctionForVolleyRequest();
}
});
}
类请求{
上下文ctx;
公共请求(上下文mContext){
ctx=mContext;
}
public void youFunctionForVolleyRequest(){
RequestQueue=Volley.newRequestQueue(ctx);
字符串url=”https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&origins=22.2913,113.947&目的地=湾仔&模式=驾驶&钥匙=“;
JsonObjectRequest JSONObjectReq=新的JsonObjectRequest(Request.Method.POST,
url,null,新响应。侦听器()
{
@凌驾
公共void onResponse(JSONObject响应){
//callback.onSuccess(response);//此处为callback函数
System.out.println(“成功”);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
//d(“截击错误json对象”,“错误:+error.getMessage());
System.out.println(“失败”);
}
})
{
@凌驾
公共字符串getBodyContentType()
{
返回“application/json”;
}
};
//将请求添加到请求队列
add(jsonObjReq);
}
}
}
在新类构造函数中,传递上下文,以便在截取时使用它
public class ClassWithVolley{
private Context context;
public ClassWithVolley(Context context){
this.context = context;
}
// continue
不工作。表示“无法解析方法
getApplicationContext()
”请尝试RequestQueue=Volley.newRequestQueue(this);在类VolleyRequests上下文中生成全局变量;并在构造函数公共VolleyRequests(Context mcontext){this.Context=mcontext;},然后使用此RequestQueue queue=Volley.newRequestQueue(上下文);当您在MainActivity中调用它时,请使用:VolleyRequests VolleyRequests=new VolleyRequests(此)我的答案被更新了它位于哪个类中?我创建了另一个名为VolleyRequests的类,上面的函数在这个类中,因此VolleyRequests不是android应用程序的活动。因此它没有不能调用this或getApplicationContext()的上下文对于上下文。因为上下文只存在于从AppCompat或AppCompatActivity扩展而来的活动类中。因此,您必须在自定义类中创建一个setter,以从您的活动或片段设置上下文。这就是我要解释的。干得好@ysl