-1

http://square.github.io/okhttp/のコードを使用しています。私が欲しいのは、ポストリクエストによってサーバーからの応答を取得したいということです。コードは次のとおりです。

package com.codingpractise.www.officemanagement;

import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class MainActivity extends Activity {

    TextView output;
    public static final MediaType JSON
            = MediaType.parse("application/json; charset=utf-8");

    OkHttpClient client = new OkHttpClient();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


//      Initialize the TextView for vertical scrolling
        output = (TextView) findViewById(R.id.message);
        output.setMovementMethod(new ScrollingMovementMethod());

    }



    public void sendSalesData(View view) {
        try{
            if(isOnline()){
                //Net connection Ok
               // requestData("http://localhost:1234/track/process/data");

                String json = "{'winCondition':'HIGH_SCORE',"
                        + "'name':'Bowling',"
                        + "'round':4,"
                        + "'lastSaved':1367702411696,"
                        + "'dateStarted':1367702378785,"
                        + "'players':["
                        + "{'name':'" + "Sattar" + "','history':[10,8,6,7,8],'color':-13388315,'total':39},"
                        + "{'name':'" + "Santo" + "','history':[6,10,5,10,10],'color':-48060,'total':41}"
                        + "]}";
                //String response = post("http://localhost:1234/track/process/data", json);
                MainActivity  thisObj = new MainActivity();

                String response = thisObj.post("http://localhost:1234/track/process/data", json);
               System.out.println(response);

               // String  response ="Fuck";
                output.setText(response);
            }
            else{
                output.setText("NO Internet connection!");
            }
        }
        catch (Exception e){
            output.setText(e.getMessage());
        }


    }

    protected boolean isOnline() {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        return netInfo != null && netInfo.isConnectedOrConnecting();
    }
      String post(String url, String json) throws IOException {
        RequestBody body = RequestBody.create(JSON, json);
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();
        Response response = client.newCall(request).execute();
        return response.body().string();
    }
} 

ボタンをクリックすると sendSalesData() 関数が実行されます。この関数では、投稿リクエストを処理します。このボタンをクリックすると、応答がoutputtextview オブジェクトに表示されるはずです。しかし、サーバーからの応答がありません。

サーバーの応答は単純な php エコー コードです。

echo 'response from server';

しかし、このボタンをクリックしても何も得られません。私のコードの問題。

私の悪い英語でごめんなさい。私はAndroidアプリの初心者なので、質問が標準的でない場合は申し訳ありません.

4

3 に答える 3

1

OkHttp を使用して JSON リクエストを送信するには、次の方法に従います -

アクティビティまたは別のアクティビティでクラス ResponseOKhttp を作成します

public class ResponseOKhttp

{
    OkHttpClient client = new OkHttpClient();

    public static final MediaType JSON
            = MediaType.parse("application/json; charset=utf-8");

    public String run(String url, String json) throws IOException {
        RequestBody body = RequestBody.create(JSON, json);
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();

        Response response = client.newCall(request).execute();
        return response.body().string();
    }

}

上記のクラスを使用してリクエストを送信するには、必要な場所でインスタンス化するだけです。

ResponseOKhttp example = new ResponseOKhttp();

String response = null;
    try {
        response = example.run(url, json.toString());
    }
    catch (JSONException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    Log.d("responsegot",response);
于 2016-03-03T06:47:13.440 に答える