我有一个带有String返回值的公共方法,但是我无法在结果上返回任何内容,因为它给了我无法返回的错误。我需要将方法的响应返回给调用此方法的类,请帮忙。
我尝试了吸气剂和塞特剂,没有帮助,只是给了我更多的错误。
public String callGraphAPI(String url) {
Log.d(TAG, "Starting volley request to graph");
/* Make sure we have a token to send to graph */
if (mAuthResult.getAccessToken() == null) {return "not signed in";}
RequestQueue queue = Volley.newRequestQueue(this);
JSONObject parameters = new JSONObject();
try {
parameters.put("key", "value");
} catch (Exception e) {
Log.d(TAG, "Failed to put parameters: " + e.toString());
}
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url,
parameters,new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
/* Successfully called graph, process data and send to UI */
Log.d(TAG, "Response: " + response.toString());
----------------------------------------------------------------------------
return "Hello";
----------------------------------------------------------------------------
//this is where i want to return the resutl
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, "Error: " + error.toString());
}
}) {
@Override
public Map<String, String> getHeaders() {
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", "Bearer " + mAuthResult.getAccessToken());
return headers;
}
};
错误不能从void方法返回。我知道,但是我如何才能得到回复?我怎样才能从这种方法中得到它?
答案 0 :(得分:0)
最简单的方法是使用回调。
public interface Callback {
void onResult(String result);
}
更改您的代码,如下所示:
public String callGraphAPI(String url, Callback callback) {
...
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url,
parameters,new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
/* Successfully called graph, process data and send to UI */
Log.d(TAG, "Response: " + response.toString());
//your result
callback.onResult(response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, "Error: " + error.toString());
}
}) {
@Override
public Map<String, String> getHeaders() {
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", "Bearer " + mAuthResult.getAccessToken());
return headers;
}
};