Volley 请求的表达式预期错误

Expression expected error on Volley requests

我在这一行的括号内收到一个名为 expression expected 的错误。 Volley.newRequestQueue(MainActivity);。此 class 在我的 MainActivity 之外的另一个 activity 上。这是我的代码片段:

    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);
}
}

在 class VolleyRequests

中创建全局变量
Context context; 

并在构造函数上初始化它

public VolleyRequests(Context mcontext) { this.context= mcontext; }

然后使用这个

RequestQueue queue = Volley.newRequestQueue(context);

当您在 MainActivity 中调用它时使用:

VolleyRequests volleyrequests = new VolleyRequests (this);

如果您的代码在 Activity.class:

RequestQueue queue = Volley.newRequestQueue(this);//or RequestQueue queue = Volley.newRequestQueue(Activity.this);//or RequestQueue queue = Volley.newRequestQueue(getApplicationContext());

如果您的代码在 Fragment.class:

RequestQueue queue = Volley.newRequestQueue(getContext());//or RequestQueue queue = Volley.newRequestQueue(getApplicationContext());//or RequestQueue queue = Volley.newRequestQueue(Fragment.this.getContext());//or RequestQueue queue = Volley.newRequestQueue(Fragment.this.getApplicationContext());

由于您在 activity/fragment 中创建了 class,因此在调用 class 时,您必须传递 activity 的上下文并同样传递给此函数,并且将 RequestQueue queue = Volley.newRequestQueue(MainActivity); 替换为 RequestQueue queue = Volley.newRequestQueue(mContext); 声明的上下文在你的 class.

里面

您可以借助以下代码片段完成此操作:

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);
    }

   }
}

在那个新的 class 构造函数中,传递上下文以便您将它与 volley 一起使用。

public class ClassWithVolley{
private Context context;
public ClassWithVolley(Context context){
this.context = context;
}
// continue