如何为Okhttp API调用创建适当的结构?

问题描述 投票:0回答:1

okhttp API调用中的我要创建结构。在我的应用程序之一中,我必须在每个屏幕中都调用api,因此在每个屏幕中的okhttp调用下面写都是不合适的。这是我使用okhttp进行api调用的代码:

OkHttpClient client = new OkHttpClient();

RequestBody formBody = new FormBody.Builder()
        .add("message", "Your message")
        .build();
Request request = new Request.Builder()
        .url("http://www.foo.bar/index.php")
        .post(formBody)
        .build();

try {
    Response response = client.newCall(request).execute();

    // Do something with the response.
} catch (IOException e) {
    e.printStackTrace();
}

有人可以建议我如何创建一个类来进行API调用。提前谢谢。

android okhttp
1个回答
0
投票

尝试创建AsynTask之类的公共类NetworkClientOkhttp扩展了AsyncTask {

private OkHttpClient client;
private OkHttpClient.Builder builder = null;

private String mUrl;
private String mParams;
private ResponseListener responseListener;

public NetworkClientOkhttp(String mUrl, String mParams, ResponseListener responseListener) {
    this.mUrl = mUrl;
    this.mParams = mParams;
    this.responseListener = responseListener;

    builder = new OkHttpClient.Builder();

    builder.connectTimeout(60, TimeUnit.SECONDS);
    builder.writeTimeout(60, TimeUnit.SECONDS);
    builder.readTimeout(60, TimeUnit.SECONDS);

    client = builder.build();
    this.execute();
}

public void sendRequest() {
    RequestBody formBody = new FormBody.Builder()
            .add("params", mParams)
            .build();

    Request request = new Request.Builder()
            .url(mUrl)
            .post(formBody)
            .build();

    try {
        Response response = client.newCall(request).execute();

        String res = response.body().string();
        if (responseListener != null) {
            responseListener.onReceiveResponse(res);
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}


public void sendFormBodyRequest() {

    try {
        JSONObject object = new JSONObject(mParams);

        FormBody.Builder formBody = new FormBody.Builder();
        while (object.keys().hasNext()) {
            String keyName = object.keys().next();
            formBody.add(keyName, object.optString(keyName));
        }
        RequestBody requestBody = formBody.build();

        Request request = new Request.Builder()
                .url(mUrl)
                .post(requestBody)
                .build();

        Response response = client.newCall(request).execute();

        String res = response.body().string();
        if (responseListener != null) {
            responseListener.onReceiveResponse(res);
        }

    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

@Override
protected String doInBackground(Void... voids) {
    RequestBody formBody = new FormBody.Builder()
            .add("params", mParams)
            .build();

    Request request = new Request.Builder()
            .url(mUrl)
            .header("issecuritydisable", "0")
            .post(formBody)
            .build();

    try {
        Response response = client.newCall(request).execute();

        String res = response.body().string();
        return res;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

@Override
protected void onPostExecute(String res) {
    super.onPostExecute(res);
    if(!TextUtils.isEmpty(res)){
        if (responseListener != null) {
            responseListener.onReceiveResponse(res);
        }
    }
}

}

© www.soinside.com 2019 - 2024. All rights reserved.