What's the number of times the letter "л" appears in:
Q: OkHttp post запрос в Android Пытаюсь использовать OkHttp для POST запроса на сервер, для этого создал отдельный класс, объект которого создается в Activity и вызывается метод post, использую метод enqueue вместо execute чтобы выполнялось в отдельном потоке:
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;

public class Post {
private static final MediaType JSON
        = MediaType.parse("application/json; charset=utf-8");

OkHttpClient client = new OkHttpClient();

  public  String post(String url, String json) throws IOException {
    RequestBody body = RequestBody.create(JSON, json);
    Request request = new Request.Builder()
            .url(url)
            .post(body)
            .build();
     Response response =client.newCall(request)..enqueue(new Callback() {
        @Override
        public void onFailure(final Call call, IOException e) {
            // Error
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    // For the example, you can show an error dialog or a toast
                    // on the main UI thread
                }
            });
        }

        @Override
        public void onResponse(Call call, final Response response) throws 
IOException {
            String res = response.body().string();
            Log.d("TAG", "response is: "+res);
            // Do something with the response
        }
    });

     return response.body().string();

}

}

Но в следующем участке кода всё подчеркивается красным и выводит ошибку Incompatible types.
Required:
okhttp3.Response
Found:
void
Так и не понял что здесь не так с типами, код брал из официальной документации. В чем может быть ошибка?

A: Метод enqueue не имеет возвращаемого значения (void), а вы пытаетесь присвоить его результат переменной типа Response:
Response response =client.newCall(request)..enqueue(new Callback() {
... 

Об этом и говорится в ошибке. Просто уберите присвоение и ошибка пропадёт:
client.newCall(request).enqueue(new Callback() {
...

Чтобы получить результат выполнения асинхронного запроса где-то в другом классе, вы можете инициализировать объект Callback в том классе, где вам нужен результат и передать его в ваш класс Post.

A: Если хотите что-то возвращать в результате метода, то вызов должен быть синхронным
public String post(String url, String json) throws IOException {
    RequestBody body = RequestBody.create(JSON, json);
    Request request = new Request.Builder()
        .url(url)
        .post(body)
        .build();
    Response response = client.newCall(request).execute();
    return response.body().string();
}

Если же нужно возвращать результат асинхронно, то нужно использовать колбек
public class Post {
    private static final MediaType JSON
        = MediaType.parse("application/json; charset=utf-8");

    OkHttpClient client = new OkHttpClient();

    public interface ResultHandler {
        void onSuccess(String response);
        void onFail(IOException error);
    }

    public void post(String url, String json, ResultHandler callback) throws IOException {
        RequestBody body = RequestBody.create(JSON, json);
        Request request = new Request.Builder()
            .url(url).post(body).build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(final Call call, IOException e) {
                callback.onFail(e);
            }
            @Override
            public void onResponse(Call call, final Response response) throws IOException {
                String res = response.body().string();
                callback.onSuccess(res);
            }
        });
    }
}


user
There are 30 "л"s in the text you provided.
assistant