如何使用可呼叫,因此可以返回网络呼叫(HTTP Post)的结果并在另一种方法中使用



我正在尝试了解如何将响应消息中的" uuid"值从HTTP帖子中找到到我的代码中的后续点。 postreqtequest 正常工作(我的测试使用一个名为" item_success_id"的文本框,我可以看到新创建的" uuid",但是然后我需要在为我的<<我的<我的><uuid构建新的端点时使用该"> okhttphandler 上传图像以与" uuid"相关联。

问题是 RUN()方法无法返回任何内容,因此我认为我需要使用可呼叫,但是我不知道如何正确使用它。

另外,也有一个约束,即 myResponse 不能两次调用。API期望客户端捕获响应并在需要时自行缓存。这就是我需要做的。我认为从可运行的方法转变为可召唤的方法并不是一个巨大的变化,但似乎是。感谢您提供的任何帮助。

@Override
public void onClick(View view) {
    switch (view.getId()) {
        case R.id.btn_create_item_image:
            try {
                postRequest(createItemEndpoint, createItemBody);
                OkHttpHandler okHttpHandler = new OkHttpHandler();
                okHttpHandler.execute(createImageEndpoint);
            } catch (IOException e) {
                e.printStackTrace();
            }
            break;
void postRequest (String postUrl, String postBody) throws IOException {
    OkHttpClient client = new OkHttpClient();
    RequestBody body = RequestBody.create(JSON, postBody);
    Request request = new Request.Builder()
            .url(postUrl)
            .post(body)
            .build();
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            call.cancel();
        }
        @Override
        public void onResponse(Call call, Response response) throws IOException {
            final String myResponse = response.body().string();
            PicActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    try {
                        JSONObject json = new JSONObject(myResponse);
                        item_success_id.setText("Item UUID: " + json.getString("uuid"));
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    });
}

您可以保留可运行的。您需要使用的是侦听器模式构造,该构造可以如下实现:

首先,定义侦听器接口,例如:

private interface OnUuidListener {
    void onUuidReady(String uuid);
}

在保存您的代码的方法中,您可能需要添加一个参数,例如:

postRequest(..., final OnUuidListener listener) {
    // Your code is here
}

您将通过网络获得的UUID致电您的听众,Wich将提供您的结果:

String uuid = json.getString("uuid");
listener.onUuidReady(uuid);

最后,要使用您的方法,您必须以匿名方式传递侦听器接口的实例:

postRequest(..., new OnUuidListener() {
        @Override
        public void onUuidReady(String uuid) {
            // A subsequent point in your code.
           item_success_id.setText("Item UUID: " + uuid);
        }
    });

感谢您的帮助人员,但我无法确切地弄清楚如何使用您的输入。我无法正确实现接口。因此,由于我意识到我实际上不需要对活动中的变量做任何事情,所以我消除了Runonuithread代码,然后我也意识到我可以在获得它的地方使用uuid,所以只需移动整个我Okhttphandler代码到我的postrequest方法内部,因此它可以立即访问它。无需保存它并保留任何东西。

相关内容

  • 没有找到相关文章

最新更新