2016-11-18 8 views
0

私はokhttp3ライブラリを使用して投稿リクエストを作成しようとしていますが、内部エラーが発生しています。私はこのライブラリとアンドロイドスタジオを使用するのが初めてですが、私が見ているすべての手段は、このようなポストリクエストを設定しています。私は間違った要求をしていますか?とにかくそれを修正するにはどうすればいいですか?私の意見でjsonとokhttp3によるHTTP POSTリクエスト

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のデモをお読みください、とあなたはこれらのライブラリでは、スレッドが作成され、okhttp3でAsyncTaskを使用する必要はありません!あなただけの結果を聞くためにコールバックを登録する必要がありますネットワーク!

+0

私はそれを取り除くことを計画していますが、なぜこの問題が発生していると思いますか?私はちょうど私のサーバが要求を取得していることを知っていましたが、jsonパッケージは空になっています。 –

+0

ああ、TextUtils(android.textのパッケージ内)を使って、serverの結果が空でないことを確認してください! – SevenNight

+1

Volley Libraryを使わないのはなぜですか?それはあなたのためのすべてを処理し、同様に非常に高速です。見てみな。 – Rajeev

関連する問題