2016-11-18 3 views
0

Ich versuche, eine Post-Anfrage mit der okhttp3-Bibliothek zu machen, aber ich bekomme immer einen internen Fehler. Ich bin neu in der Verwendung dieser Bibliothek und Android-Studio, aber jede Regress, die ich angeschaut habe, hat die Post-Anfrage so eingerichtet. Mache ich die Anfrage falsch und wenn ja, gibt es trotzdem eine Lösung?HTTP-Post-Anfrage mit JSON und okhttp3

package com.example.john.okhttp; 


import android.os.AsyncTask; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import org.json.JSONObject; 
import okhttp3.MediaType; 
import okhttp3.OkHttpClient; 
import okhttp3.Request; 
import okhttp3.RequestBody; 
import okhttp3.Response; 


public class MainActivity extends AppCompatActivity { 
    private Button btnSendHttpRequest; 
    private EditText etJsonResponse; 
    private TextView View; 
    private TextView View2; 
    private OkHttpClient okHttpClient; 
    private Request request ; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     //set button and text view values 
     btnSendHttpRequest = (Button) findViewById(R.id.btnSendRequest); 
     View = (TextView) findViewById(R.id.view1) ; 
     View2 = (TextView) findViewById(R.id.textView4); 
     etJsonResponse = (EditText) findViewById(R.id.etjson); 
     //response for button 
     btnSendHttpRequest.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //http request 
       new Requesting().execute(); 
      } 
     }); 

    } 


    public class Requesting extends AsyncTask<String , Void , String> 
    { 
     // post request stuff 
     @Override 
     protected String doInBackground(String... params) { 
      MediaType JSON = MediaType.parse("application/json; charset=utf-8"); 
      // get client 
      OkHttpClient client = new OkHttpClient(); 
      //post method to post to server 
      String url = "http://45.55.92.243/newuser"; 
      String json = "{ 'id' : 333333, 'name' : john }"; 


      RequestBody body = RequestBody.create(JSON, json); 
      Request request = new Request.Builder() 
        .url(url) 
        .post(body) 
        .build(); 
      try(Response response = client.newCall(request).execute()){ 
       return response.body().string(); 
      } 
      catch(Exception e){ 
       System.out.println("section1"); 
       return null; 
      } 

    } 


    @Override 
    protected void onPostExecute(String retstr) { 
     super.onPostExecute(retstr); 
     //rewrite text view 
     try { 
      // create json ob from response 
      JSONObject jsonObj = new JSONObject(retstr); 
      //get the values from the json key value pairs 
      String id = jsonObj.toString(); 
      //update the text views 
      TextView textView = (TextView) findViewById(R.id.view1); 
      textView.setText(id); 
      System.out.println(retstr); 
     } 
     catch (Exception e){ 
      System.out.println(retstr); 
      System.out.println("section2"); 
     } 
     } 
    } 

} 

Antwort

-1

Meiner Meinung nach, sollten Sie die Demo des okhttp3 lesen, und Sie müssen nicht verwenden AsyncTask mit okhttp3, in diesen Bibliotheken werden Thread erstellt werden! Sie müssen nur einen Rückruf registrieren das Ergebnis der hören Netzwerk!

+0

Ich plane das heraus, aber denkst du, dass das ist, warum ich dieses Problem bekomme? Ich habe gerade herausgefunden, dass mein Server die Anfrage erhält, aber das JSON-Paket ist leer. –

+0

Oh, bitte benutze TextUtils (im Paket von android.text), um sicherzustellen, dass das Ergebnis des Servers nicht leer ist! – SevenNight

+1

Warum nicht die Volley Library benutzen? Es handhabt alles für Sie und ist auch ziemlich schnell. Hör zu. – Rajeev

Verwandte Themen