Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自OkHttpClient异步请求的返回值_Java_Android_Okhttp - Fatal编程技术网

Java 来自OkHttpClient异步请求的返回值

Java 来自OkHttpClient异步请求的返回值,java,android,okhttp,Java,Android,Okhttp,在我的第一个android项目中,我制作了一个onClick事件来调用函数: public void doSomething(View v) { String result = authenticate(); [...] } 此函数调用以下方法: private String authenticate() { OkHttpClient client = new OkHttpClient(); [...] cli

在我的第一个android项目中,我制作了一个onClick事件来调用函数:

public void doSomething(View v) {
        String result = authenticate();
        [...]
}
此函数调用以下方法:

private String authenticate() {
        OkHttpClient client = new OkHttpClient();

        [...]

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                [...]
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    String responseString = response.body().string();

                    try {
                        JSONObject responseObject = new JSONObject(responseString);
                        String responseObjectAccessToken = responseObject.getString("accesstoken");
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }

现在我想将responseObjectAccessToken返回到我的doSomething函数。详细的解释会很好,因为我是Java和Android Studio的新手。

一个建议是通过回调处理异步响应,回调作为参数传递给
authenticate
方法。在这里,我使用Java8Lambda作为单方法接口

公共类MyActivity扩展活动{
公共接口身份验证回调{
无效onAuthResult(字符串标记);
}
私有字符串身份验证(AuthCallback){
// ...
String responseObject accesstoken=responseObject.getString(“accesstoken”);
onAuthResult(responseObjectAccessToken)
// ...
}
公共空间剂量测量(视图五){
验证((令牌)->{
//用代币做点什么
});
}
// ...
}
如您所见,如果您想:

/。。。
AuthCallback cb=新的AuthCallback(){
@凌驾
AuthResult(字符串标记)上的公共void{
//在视图/片段/活动中执行某些操作
}
}
//然后将其作为参数传递
或者,您的类可以实现此接口并将其自身传递给该方法:

private String authenticate() {
        OkHttpClient client = new OkHttpClient();

        [...]

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                [...]
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    String responseString = response.body().string();

                    try {
                        JSONObject responseObject = new JSONObject(responseString);
                        String responseObjectAccessToken = responseObject.getString("accesstoken");
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }
公共类MyActivity扩展活动实现AuthCallback{
@凌驾
AuthResult(字符串标记)上的公共void{
//做点什么
}
// ...
公共空间剂量测量(视图五){
验证(MyActivity.this);//{
runOnUiThread(()->{
//在这里对UI做些什么
})
});