0

Android で HttpClient を介して文字列データを投稿したいのですが、応答ステータス コード 503 - サービスを利用できず、URL の Html コードとして応答を返した後、疲れています。

JAVA アプリケーションで次のコードを記述し、データを返しますが、Android アプリケーションで同じコードを記述すると、例外ファイル I/O が見つからないというメッセージが表示され、この場合は戸惑います:

public void goButton(View v)
{

   try{
      URL url = new URL("https://xxxxxxxxx");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        Test ts= new ApiRequest("null","getUserbyID",new String[] {                                         "66868706" });

        String payLoad = ts.toString();    //toSting is override method that create //JSON Object
        System.out.println("--->>> " + payLoad);
        conn.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        System.out.println("=================>>> "+ payLoad);


    wr.write(payLoad);
    wr.flush();
   BufferedReader rd = new BufferedReader(new nputStreamReader(conn.getInputStream()));

    String line;
   while ((line = rd.readLine()) != null) {
  System.out.println("-->> " + line);
  response += line;
  }
  wr.close();
   rd.close();
    System.out.println("=================>>> "+ response);


} catch (Exception e) {
    e.printStackTrace();
    System.out.println("=================>>> " + e.toString());
    throw new RuntimeException(e);
}

このコードを AsynTask、Thread に入れようとしましたが、同じ応答ステータス コードを受け取りました。以下のAndroidコードをサンプルデータとして書きます

public void goButton(View v)
{
 try{
         new Thread(new Runnable() {
     public void run() {

     HttpClient client = new DefaultHttpClient();
     HttpConnectionParams.setConnectionTimeout(client.getParams(),
     10000); // Timeout Limit
     HttpResponse response;

     String url = "https://xxxxxxxxxxxxx";

     JSONObject json = new JSONObject();

     try {

     HttpPost post = new HttpPost(url);
     post.setHeader("Content-type", "application/json");
     json.put("service","null");
     json.put("method", getUserByID.toString());
     json.put("parameters", "1111");
     System.out.println(">>>>>>>>>>>" + json.toString());

     StringEntity se = new StringEntity(json.toString());
     se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,
     "application/json"));
     post.setEntity(se);

             String response = client.execute(post);

     if (response != null) {
     String temp = EntityUtils.toString(response.getEntity());

     System.out.println(">>>>>>>>>>>" + temp);
     }
     } catch (Exception e) {
     e.printStackTrace();
     System.out.println(">>>>>>>>>>>" + e.getMessage());

     }
     }
     }).start();
}

この問題の解決策を見つけるのを手伝ってください:(

前もって感謝します

4

2 に答える 2

0

モハメド・サリームさん

私が提供するコード スニペットは、次のように動作します。

1) Android デバイスが URL とデータをサーバーに送信する

2)サーバー [たとえば ASP.NET プラットフォームを使用] がデータを受信し、確認応答を返します。

これで、クライアント側 (Android) で記述すべきコードが提供されました。サーバーでそのデータを受信する後半部分は次のとおりです。

  • サーバーはデータを受信する必要があります
  • そのためには、Webサービスを使用する必要があります
  • サーバー側で Web サービスを実装する
  • AndroidがURL +データをプッシュするたびに、Webサービスが呼び出されます
  • データを取得したら、必要に応じて操作します
于 2013-04-22T07:43:04.377 に答える
0

これがコード スニペットです。お役に立てば幸いです。

1)http getサービスを搭載した機能

   private String SendDataFromAndroidDevice() {
    String result = "";

    try {
        HttpClient httpclient = new DefaultHttpClient();
        HttpGet getMethod = new HttpGet("your url + data appended");

        BufferedReader in = null;
        BasicHttpResponse httpResponse = (BasicHttpResponse) httpclient
                .execute(getMethod);
        in = new BufferedReader(new InputStreamReader(httpResponse
                .getEntity().getContent()));

        StringBuffer sb = new StringBuffer("");
        String line = "";
        while ((line = in.readLine()) != null) {
            sb.append(line);
        }
        in.close();
        result = sb.toString(); 


    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

2) AsyncTask を拡張するクラス

   private class HTTPdemo extends
        AsyncTask<String, Void, String> {

    @Override
    protected void onPreExecute() {}

    @Override
    protected String doInBackground(String... params) {
        String result = SendDataFromAndroidDevice();
        return result;
    }

    @Override
    protected void onProgressUpdate(Void... values) {}

    @Override
    protected void onPostExecute(String result) {

        if (result != null && !result.equals("")) {
            try {
                JSONObject resObject = new JSONObject(result);

                } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

3) onCreate メソッドの内部

     @Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView("your layout");



    if ("check here where network/internet is avaliable") {

        new HTTPdemo().execute("");
    }

   }

このコード スニペット、Android デバイスは URL 経由でデータをサーバーに送信します。サーバーは URL からそのデータをフェッチする必要があります。

于 2013-04-22T07:28:55.507 に答える