2016-11-18 6 views
0

Я пытаюсь сделать запрос после использования библиотеки okhttp3, но я продолжаю получать внутреннюю ошибку. Я новичок в использовании этой библиотеки и андроид-студии, но каждый регресс, который я рассматривал, имеет такой пост-запрос. Я делаю запрос неправильно, и если так, то все равно, чтобы это исправить?HTTP-запрос почты с json и 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"); 
     } 
     } 
    } 

} 

ответ

-1

На мой взгляд, вы должны прочитать демо okhttp3, и вам не нужно использовать AsyncTask с okhttp3, в этих библиотеках, будет создан поток! Вам просто нужно зарегистрировать функцию обратного вызова, чтобы прослушать результат из сеть!

+0

Я действительно планирую принять это, но, по-вашему, именно поэтому я получаю эту проблему? Я только узнал, что мой сервер получает запрос, но пакет json кончается как пустой. –

+0

О, пожалуйста, используйте TextUtils (в пакете android.text), чтобы убедиться, что результат сервера не пуст! – SevenNight

+1

Почему бы не использовать библиотеку волейбола? Он обрабатывает все для вас и довольно быстро. Проверьте это. – Rajeev