Преобразование строки в json с помощью Okhttp - PullRequest
0 голосов
/ 03 июня 2018

Прежде всего, я искал ответ, и на самом деле ни один не работает, API в порядке, URL-адрес в порядке.

У меня есть конструктор методов, который создает URL-адрес и имя API, он работалхорошо, но один из API должен прикрепить токен в url и params через почту, у меня проблема там

Post метод, который я использую

public Heap post(String... params) throws ApiException {
    Heap answer = new Heap();
    StringBuilder listedParams = new StringBuilder();
    for (int i = 1; i < params.length - 1; i++) {
        listedParams.append(params[i]);
    }
    try {
        answer = new Heap(new JSONObject(new AsyncRequest().execute(urlBuildier(params[0]), listedParams.toString(), "post").get()));
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return answer;
}

urlBuilder метод I 'используя

private String urlBuildier(String... parts) {
    ArrayList<String> params = new ArrayList<>();
    if (assets)
        params.add(urlAssets);
    else
        params.add(url);

    final StringBuilder helper = new StringBuilder();
    Collections.addAll(params, parts);
    Heap built = new Heap(params);
    built.forEach(new Part() {
        @Override
        public void Run(Heap part) {
            helper.append(part.get());
        }
    });
    return helper.toString();
}

асинхронный класс

OkHttpClient client = new OkHttpClient();
                MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
                RequestBody body = RequestBody.create(mediaType, params[1]);
                Request request = new Request.Builder()
                        .post(body)
                        .addHeader("content-type", "application/x-www-form-urlencoded")
                        .url(params[0])
                        .build();

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

                String responseStrng = response.body().string();
                return responseStrng;

Проблема возникает, когда URL должен присоединить токен, пример: https://url/api/apiname? Это работает с моим методом post

Но: https://url/api/apiname?token=abc123 не работает с моим методом публикации.

PDT: единственной вещью, которую я изменил по сравнению с предыдущими методами, была моя запись и асинхронизация сообщений следующим образом:

предыдущий метод публикации

public Heap post(String... params) throws ApiException {
    Heap answer = new Heap();
    try {
        answer = new Heap(new JSONObject(new AsyncRequest().execute(urlBuildier(params), "post").get()));
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return answer;
}

предыдущий okhttp async

final String[] post = params[0].split("[?]");
                OkHttpClient client = new OkHttpClient();

                MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
                RequestBody body = RequestBody.create(mediaType, post[1]);
                Request request = new Request.Builder()
                        .url(post[0])
                        .post(body)
                        .addHeader("content-type", "application/x-www-form-urlencoded")
                        .build();

                Response response = client.newCall(request).execute();
                String responseStrng = response.body().string();
return responseStrng;

Это мой журнал:

06-02 22:32:04.443 6335-6335/co.cardseed.cardseed W/System.err:   org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be   converted to JSONObject
    at org.json.JSON.typeMismatch(JSON.java:111)
    at org.json.JSONObject.<init>(JSONObject.java:160)
    at org.json.JSONObject.<init>(JSONObject.java:173)
06-02 22:32:04.444 6335-6335/co.cardseed.cardseed W/System.err:     at co.cardseed.cardseed.app.api.Api.post(Api.java:103)
    at co.cardseed.cardseed.activities.WebActivity.onCreate(WebActivity.java:45)
    at android.app.Activity.performCreate(Activity.java:6272)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
    at android.app.ActivityThread.access$900(ActivityThread.java:157)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5551)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)

Я бы оценил любую помощь.

1 Ответ

0 голосов
/ 06 июня 2018

Хорошо, servermaster разрешает отправку токена через заголовок, и это вроде как решает проблему, но в Android это никогда не работает.Спасибо за все.

...