如何在Lambda中返回值

时间:2019-04-04 14:06:27

标签: java android lambda

我是Java 8和lambda的新手,我不知道应该如何在lambda内部返回值。 我尝试了此代码,但返回空值,但在日志中记录了令牌。 我也尝试了静态值,但没有用。我想在另一个Java类中返回此值并使用它。

 public  String GetToken(Context context,String user_name,String password) throws JSONException {
        RequestQueue requestQueue= Volley.newRequestQueue(context);
        JSONObject jsonBody = new JSONObject();
        jsonBody.put("user_name", user_name);
        jsonBody.put("password", password);
        final String mRequestBody = jsonBody.toString();

        StringRequest request = new StringRequest(
                    Request.Method.POST,
                    url,
                    response -> {
                        try {
                            JSONObject jso = new JSONObject(response);
                            String token=jso.getString("token");
                            result=token;
                        } catch (JSONException e) {
                            e.printStackTrace();
                            Log.i("GetTokene",e.toString());
                            result=e.toString();
                        }
                    },
                    error -> {
                        Log.i("GetTokenE",error.toString());
                         result=error.toString();
                    }
            ) {
                @Override
                public String getBodyContentType() {
                    return "application/json";
                }
                @Override
                public byte[] getBody() {
                    try {
                        return mRequestBody == null ? null : mRequestBody.getBytes("utf-8");
                    } catch (UnsupportedEncodingException uee) {
                        // VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8");
                        return null;
                    }
                }              
            };

            requestQueue.add(request);
            return result;
        }

1 个答案:

答案 0 :(得分:0)

仅因为使用了lambda而不是匿名类,所以它仍然是回调,并且仍将被异步调用。这意味着它无法将值返回给调用代码,因为它将在将来的某个时候被调用。您必须直接或通过从那里调用来将所有需要结果的代码放入lambda。