2

以下は、ローカル サーバー上の PHP スクリプトに投稿しようとしているコードのスニペットです。サーバーの MySQL テーブルにデータを送信していますが、データ量が非常に少ないため、HttpClient を使用して URL 引数にデータを埋め込むことを考えました。

ただし、サーバーからの応答は OK (HTTP コード = 200) ですが、サーバー側の PHP スクリプトが正しくフォーマットされたデータを取得していないことは明らかです (MySQL テーブルには影響しません)。ただし、次のようにブラウザーに URL + 引数を手動で入力すると、次のようになります。

http://10.0.0.13/jobs_returndata_test.php?jobnum=189193&pnum=3&entime=13:00&extime=14:00 

たとえば、すべて正常に動作します (PHP スクリプトは MySQL テーブルに正しく書き込みます)。

私の質問: HttpClient によって送信されているものを実際に表示する方法はありますか? (つまり、HttpPost オブジェクトの .toString コンテンツ全体?)。Android 側のスニペットは次のとおりです。

// Create a new HttpClient and Post Header, send data as args to PHP file
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://10.0.0.13/jobs_returndata.php");
try {
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("jobnum",convertSimple(jobNum)));
    nameValuePairs.add(new BasicNameValuePair("pnum",convertSimple(rowNum)));
    nameValuePairs.add(new BasicNameValuePair("entime",enteredInTime));
    nameValuePairs.add(new BasicNameValuePair("extime",enteredOutTime));

    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    Log.i("HTTP Post", "Execute Post sending jobnum="+ convertSimple(jobNum) +      
    "&pnum="+ convertSimple(rowNum) + "&entime=" + enteredInTime
                    + "&extime=" + enteredOutTime);
    // Execute HTTP Post Request
    HttpResponse response = httpclient.execute(httppost);
    Log.i("HTTP Post", "Response from server = " + response.getStatusLine().getReasonPhrase() + "  Code = " + convertSimple(response.getStatusLine().getStatusCode()));

        } catch (ClientProtocolException e) {
            Log.e("HTTP Post", "Protocol error = " + e.toString());
        } catch (IOException e) {
            Log.e("HTTP Post", "IO error = " + e.toString());
        }

そして、私のサーバー側の PHP ファイルは次のとおりです。

?php
$jobnum=$_GET['jobnum'];
//echo "jobnum = $jobnum <br />";
$pnum=$_GET['pnum'];
//echo "pnum = $pnum <br />";

$entime=$_GET['entime'];
//echo "entime = $entime <br />";

$extime=$_GET['extime'];
//echo "extime = $extime <br />";


$dbh=mysql_connect ("localhost", "Steve", "pluggin");
mysql_select_db ("DriverJobs");

$result = mysql_query("UPDATE jobs SET EntryTime = '$entime' WHERE JobNumber = '$jobnum' AND PointNum = '$pnum' ");  
$result = mysql_query("UPDATE jobs SET ExitTime = '$extime' WHERE JobNumber = '$jobnum' AND PointNum = '$pnum' ") ;  

//echo "done <br />";
?>

関連セクションの logcat:

06-22 13:33:11.341: I/HTTP Post(27788): 実行 Post 送信 jobnum=189193&pnum=3&entime=9:00&extime=9:05 06-22 13:33:11.581: I/HTTP Post(27788):サーバーからの応答 = OK コード = 200

アクセス許可は適切です (インターネットのマニフェスト ファイルと、PHP ファイルの場合、Apache2 がオンで実行中、API=8、Android エミュレーターで Eclipse を使用)。convertSimple()は、int プリミティブに相当する文字列を返す 2 ライナーです。

これを見てくれてありがとう!

4

4 に答える 4

6

この方法を使用する

private String convertStreamToString(InputStream is) throws Exception {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null) {
        sb.append(line);
    }
    is.close();
    return sb.toString();
}   

このように呼び出して、post メソッドに含まれるエンティティを確認します

try {
    HttpPost postMethod = new HttpPost("your url");
    Log.i(TAG,"HTTP Entiry : " + convertStreamToString(postMethod.getEntity().getContent()));
}catch (Exception e){
    e.printStackTrace();
}
于 2012-06-22T04:41:51.657 に答える
3

変数をブラウザーに入力したときに変数が表示される理由は、GET と POST の違いです。ブラウザーを使用する場合、変数を GET 形式で送信します。

あなたのphpコードで次を使用します:

$_POST['varname'];

または、 request を使用して POST および GET 変数を取得できます。

$_REQUEST['varname'];
于 2012-06-22T04:14:58.000 に答える
1

フィドラーを使用してリクエストを表示します

于 2012-06-22T04:20:08.097 に答える
-1

HttpResponseの後に、以下に示すようにコードを追加します

       InputStream is;

           try{
             if( response == null ){

               }else{
                  HttpEntity entity = response.getEntity();
                  is = entity.getContent();   
                     }

              } catch (Exception e) {
               Log.e("log_tag", "Error in http connection " + e.toString());
                 }

        // convert response to string
    try {
          BufferedReader reader = new BufferedReader(new InputStreamReader(
              is, "iso-8859-1"));
          StringBuilder sb = new StringBuilder();
          String line = null;
          while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
          }
          is.close();
          result = sb.toString();
          Log.e("res",result); 
      } catch (Exception e) {
          Log.e("log_tag", "Error converting result " + e.toString());
       }

結果は、 テスト目的でログに出力した文字列で応答を返します

于 2012-06-22T04:21:12.603 に答える