2017-07-22 1 views
0

Ich versuche, Token an den Server mit OKHTTP-Bibliothek senden, aber bekomme nicht die Post-Anfrage von der Anwendung gesendet.OKHttp Post nicht erhalten Daten gesendet auf der Serverseite

Ich habe bereits die Internet-Erlaubnis in meinem Manifest hinzugefügt.

private void registerToken(String token) { 

     final OkHttpClient client = new OkHttpClient(); 

     RequestBody formBody = new FormBody.Builder() 
       .add("token", token) 
       .build(); 

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

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

      Log.i(TAG, "ok"); 
      Log.i(TAG, response.message()); 
     } catch (IOException e) { 
      e.printStackTrace(); 

      Log.i(TAG, e.getMessage()); 
      Log.i(TAG, "nok"); 
     } 
    } 

Server

if(isset($_POST["token"])){ 
    $token = $_POST["token"]; 

    $db_data = $database->insert("tokens", [ 
     "token" => $token 
    ]); 
} 

Antwort

1

Ihr Code korrekt aussieht wird so werden einige weitere Informationen benötigt. Von dem, was zur Verfügung gestellt wird meine beste Vermutung wäre http wird auf https umgeleitet und vielleicht verlieren den POST-Körper oder etwas in diese Richtung.

Eine Möglichkeit zur Fehlerbehebung ist das Hinzufügen einer NetworkInterceptor, die die HTTP-Anforderungen protokolliert, so dass Sie in das, was tatsächlich passiert, eintauchen können. Hier ist ein lauffähiges Beispiel OkHttpClient logging

Logger logger = LoggerFactory.getLogger(HttpUtil.class); 
HttpLoggingInterceptor logging = 
    new HttpLoggingInterceptor((msg) -> { 
     logger.debug(msg); 
    }); 
logging.setLevel(Level.BODY); 

client.addNetworkInterceptor(logging); 

Konfiguration Wenn Sie die Debugging-Ausgabe zu Ihrer Frage hinzufügen können wir tiefer tauchen können, wenn kein Problem mit http -> https umleitet.

Nur ein Hinweis OkHttpClient sind Thread-sicher und sollen von vielen Threads verwendet werden. Es empfiehlt sich, eine OkHttpClient zu verwenden, die erneut verwendet wird (pro spezifische Konfiguration). Sie können eine statische Instanz oder Abhängigkeit einfügen, um sie einzufügen. Das Erstellen einer Methode pro Methodenaufruf hat einen zusätzlichen Aufwand.

0

Versuchen Sie, diese

public static void send(JSONObject obj){ 
    new OkHttpClient().newCall(new Request.Builder() 
      .addHeader("Content-Type", "application/json") 
      .url("URL...") 
      .post(RequestBody.create(
        MediaType.parse("application/json; charset=utf-8"), 
        obj.toString()) 
      ).build()) 
    .enqueue(new Callback() { 
     @Override 
     public void onFailure(Call call, IOException e) { 
      Log.d("ZAKA",e.getMessage()); 
     } 
     @Override 
     public void onResponse(Call call, Response response) throws IOException { 
      Log.d("ZAKA","Report : -> "+response.body().string()); 
     } 
    }); 
} 

es dann rufen

JSObject obj = new JSObject(); 
obj.put("token","your token"); 
send(obj); // Call send method 
Verwandte Themen