2016-07-27 18 views
0

Ich habe meine eigene Frage hier beantwortet. Siehe den ersten Codeblock, in dem ich php: // input verwende, um die geposteten Daten zu erhalten.Warum erhalte ich POST vars nicht von OkHttp3? (Android Studio)

Ich versuche, eine Post-Anforderung von meiner App auf einen Webserver zu senden, und ich bin für den Posten Überprüfung vars PHP:

if(isset($_POST['name'])){ 
    echo json_encode(['status' => 1]); 
}else if($posted_data = (string) @file_get_contents('php://input')) { 
    echo json_encode(['status' => 2]); 
}else{ 
    echo json_encode($_POST); 
} 

Die Anforderung immer wieder und leer json Array kodiert.

Ich benutze das neueste Android Studio, und die neueste OkHttp, com.squareup.okhttp3: okhttp: 3.4.1. Für mich ist das wie die "Hallo Welt" von OkHttp im Android Studio.

In MainActivity.java:

public void postSomething(View view) { 
    String url = "https://example.com/json_api_test.php"; 
    String json = "{\"name\":\"cholula\"}"; 
    OkHttpPostHandler handler = new OkHttpPostHandler(); 
    String result = ""; 
    try { 
     result = handler.execute(url, json).get(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    displayPostResponse(result + "\n"); 
} 

Mein OkHttpPostHandler.java:

public class OkHttpPostHandler extends AsyncTask<String, Void, String> { 

    OkHttpClient client = new OkHttpClient(); 

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

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

     RequestBody body = RequestBody.create(JSON, params[1]); 

     Request request = new Request.Builder() 
       .url(params[0]) 
       .post(body) 
       .build(); 

     try { 
      Response response = client.newCall(request).execute(); 
      return response.body().string(); 
     } 
     catch(Exception e){ 
      return "HTTP Request Error"; 
     } 
    } 
} 

Wenn ich debuggen, kann ich sehen, dass der params [1] Wert das erwartete json artigen String, aber das ist das letzte Mal, dass ich es sehe.

Ich habe versucht, die JSON in einer Reihe von Möglichkeiten, so dass ich nicht sicher bin, ob das das Problem ist. Ich verstehe einfach nicht, warum ich die geposteten Vars nicht sehen kann, wenn die Post-Anfrage zum Server kommt.

Wie kann ich die geposteten Vars auf dem Webserver sehen? Was mache ich falsch? Ich verwende Android Studio und Java erst seit weniger als einer Woche, also habe ich keine Ahnung. Ich habe mich wirklich viel im Internet nach der Antwort umgesehen, und deshalb ist das Posting hier der letzte Ausweg.

Danke!

Antwort

0

Es stellt sich heraus, dass man php: // Eingang verwenden muss, um die geposteten Daten zu erhalten.