Q: Как получить ответ из POST запроса Как получить ответ из POST запроса, заранее спасибо
Вызов в мэйне:
new DoPOSTInBackground().execute(key)
String[] key = {"qwerty"};

Сам класс:
 package com.admin.post; 

 import android.os.AsyncTask; 

 import java.io.IOException; 
 import java.util.ArrayList; 

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

 class DoPOSTInBackground extends AsyncTask<String, Void, String> { 



 @Override 
 protected String doInBackground(String... keys) { 

 OkHttpClient client = new OkHttpClient(); 

 RequestBody formBody = new FormBody.Builder() 
      .add("name_form", "key_client") 
      .add("key", keys[0]) 
      .build(); 

 Request request = new Request.Builder() 
      .url("http://example.ru/index.php") 
      .post(formBody).build(); 

 client.newCall(request).enqueue(new Callback() { 

      @Override 
      public void onFailure(Call call, IOException e) { 
           e.printStackTrace(); 
      } 

      @Override 
      public void onResponse(Call call, Response response) throws IOException { 
           System.out.println(response.body().string()); 
        } 
      }); 

      return null; 
      } 
 }


A: Вариант 2. Без использования AsyncTask
class CoreOkHttpPost  {
//слушатель событий, будет оповещен, когда запрос закончит выполняться.
private PostRequestListener postRequestListener;

public void setPostRequestListener(PostRequestListener postRequestListener) {
    this.postRequestListener = postRequestListener;
}

public void makePostRequest(){
    OkHttpClient client = new OkHttpClient();

    RequestBody formBody = new FormBody.Builder()
            .add("name_form", "key_client")
            .add("key", keys[0])
            .build();

    DownloadManager.Request request = new Request.Builder()
            .url("http://example.ru/index.php")
            .post(formBody).build();

    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            System.out.println("post request failed");
        }

        @Override
        public void onResponse(Call call, final Response response) throws IOException {
            //берем ответ от сервера
            final String responseString = response.body().string();
            //Так как enqueue выполняется в отдельном потоке, соответственно
            //onResponse тоже будет выполнен в том же (отдельном от главного) потоке.
            //Активити и фрагменты не любят когда трогают View-элементы не в main потоке,
            //поэтому решаем эту проблему Handler'ом. Иначе будет Exception.
            new Handler(Looper.getMainLooper()).post(new Runnable() {
                @Override
                public void run() {
                    notifyRequestExecuted(responseString);
                }
            });
        }
    });
}

//оповещение можно вынести в отдельный метод
private void notifyRequestExecuted(String response){
    if (postRequestListener != null)
    {
        postRequestListener.onResponse(response);
    }
}

public interface PostRequestListener{
    void onResponse(String response);
}

}
Активити или фрагмент
public class ActivityOrFragment implements CoreOkHttpPost.PostRequestListener {

void makeRequest(){
    CoreOkHttpPost coreOkHttpPost = new CoreOkHttpPost();
    coreOkHttpPost.makePostRequest();
    coreOkHttpPost.makePostRequest();
}

@Override
public void onResponse(String response) {
    //твой ответ здесь
}

}

A: Вы сделали лишнюю работу. Вы создали асинхронную задачу и в ней асинхронно шлёте запрос. Вам досточно всего одной асинхронности. Т.е. или убрать асинхронный вызов запроса к серверу или убрать АсинкТаск вообще.

A: Ладно, распишу оба варианта. 
Вариант 1. Использование класса AsyncTask
класс DoPOSTInBackground
class DoPOSTInBackground extends AsyncTask<String, Void, String> {
//сюда будет помещен ответ от сервера
private String mResponseString;
//слушатель событий, будет оповещен, когда запрос закончит выполняться.
private PostRequestListener postRequestListener;

public void setPostRequestListener(PostRequestListener postRequestListener) {
    this.postRequestListener = postRequestListener;
}

@Override
protected String doInBackground(String... keys) {

    OkHttpClient client = new OkHttpClient();

    RequestBody formBody = new FormBody.Builder()
            .add("name_form", "key_client")
            .add("key", keys[0])
            .build();

    DownloadManager.Request request = new Request.Builder()
            .url("http://example.ru/index.php")
            .post(formBody).build();

    //doInBackground вызывается в отдельном потоке, значит
    //execute() можно вызывать прямо здесь.
    //Метод enqueue(), в отличие от него, вызывается в отдельном потоке
    //поэтому в данном случае нет смысла этого делать.
    client.newCall(request).execute();
    return null;
}

@Override
protected void onPostExecute(String s) {
    super.onPostExecute(s);
    //onPostExecute вызывается на главном потоке, поэтому никаких проблем
    //нет, можно отправлять событие слушателю.
    if (postRequestListener != null)
    {
        postRequestListener.onResponse(mResponseString);
    }
}

public interface PostRequestListener{
    void onResponse(String response);
}

}
Активити или фрагмент
public class ActivityOrFragment implements DoPOSTInBackground.PostRequestListener {

void makeRequest(){
    DoPOSTInBackground task = new DoPOSTInBackground().execute();
    task.setPostRequestListener(this);
}

@Override
public void onResponse(String response) {
    //твой придет сюда. 
}

}
