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");
}
}
}
}
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. –
Oh, bitte benutze TextUtils (im Paket von android.text), um sicherzustellen, dass das Ergebnis des Servers nicht leer ist! – SevenNight
Warum nicht die Volley Library benutzen? Es handhabt alles für Sie und ist auch ziemlich schnell. Hör zu. – Rajeev