我是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;
}
答案 0 :(得分:0)
仅因为使用了lambda而不是匿名类,所以它仍然是回调,并且仍将被异步调用。这意味着它无法将值返回给调用代码,因为它将在将来的某个时候被调用。您必须直接或通过从那里调用来将所有需要结果的代码放入lambda。