5

httpポストを使用してWebサービスにデータを送信しようとしているアプリがあります。ユーザー データは文字列 int と double の混合です。アプリでは、AsyncTask を使用してネットワーク呼び出しを実行するときのように (メイン スレッド上にないように)、すべてが文字列として表されます。params 配列は文字列型です。

私が抱えている問題は、サーバーが時々 int を期待することです。たとえば、compID は、サーバーが期待する int です。http 投稿を使用する場合は、NameValuePair を使用します。これは文字列のみを受け入れます。http ポストに int または double を渡すにはどうすればよいですか?

私の活動で。

String[] params = new String[]{tagCompany, tagId, tagPerson, OUT,
                                null, null,null, null, null, null}; 
                        AsyncPostData apd = new AsyncPostData();
                        apd.execute(params);





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

        ProgressDialog progressDialog;

        @Override
        protected void onPreExecute()
        {
            progressDialog= ProgressDialog.show(NfcscannerActivity.this, 
                    "Connecting to Server"," Posting data...", true);            
        };  


        @Override
        protected Void doInBackground(String... params) {

            nfcscannerapplication.loginWebservice.postData(params[0], params[1], params[2], params[3], params[4],
                    params[5], params[6], params[7], params[8], params[9]);
            return null;
        }

         @Override
            protected void onPostExecute(Void result)
            {
             super.onPostExecute(result);
                if(progressDialog != null)
                progressDialog.dismiss();

            }
    }//end of AsyncPostData 

.

私の投稿方法

public void postData( String compID, String tagID, String clientID, String carerID, 
            String phoneScanned, String phoneSent, String TXType, String phoneType, String latitude, String longitude) {
        // Create a new HttpClient and Post Header
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://cfweb.yourofficeanywhere.co.uk:88/roadrunner.asmx/PostTransaction");


        try {
            // Add your data
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("CompanyID", compID));
            nameValuePairs.add(new BasicNameValuePair("TagID", tagID));
            nameValuePairs.add(new BasicNameValuePair("ClientID", clientID));
            nameValuePairs.add(new BasicNameValuePair("CarerID", carerID));
            nameValuePairs.add(new BasicNameValuePair("PhoneScanned", "2010-10-16 16:30 000"));
            nameValuePairs.add(new BasicNameValuePair("PhoneSent", "2010-10-16 16:32 000"));
            nameValuePairs.add(new BasicNameValuePair("TXType", "2"));
            nameValuePairs.add(new BasicNameValuePair("PhoneType", "2"));
            nameValuePairs.add(new BasicNameValuePair("Latitude", latitude));
            nameValuePairs.add(new BasicNameValuePair("Longitude", longitude));

            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            // Execute HTTP Post Request
            HttpResponse response = httpclient.execute(httppost);

            Log.e(TAG, "response of post = " + response.toString());



        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
        } catch (IOException e) {
            // TODO Auto-generated catch block
        }
    } 

私の post メソッドでは、値の一部が今のところ null に設定されています。私が知りたいのは、CompID を NameValuePair で int にする方法です。compID はアクティビティから String として取得されますが、サーバーは int を想定しています。

4

3 に答える 3

11

次のようなことができます。

nameValuePairs.add(new BasicNameValuePair("TXType",Integer.toString (2)));

TxType がキーで、2 が値です

于 2012-10-17T09:55:32.070 に答える
0

この質問が出されてから長い時間が経ちましたが、このページにたどり着いた人たちを助けたいと思います. 上記の引数のように、namevaluepair で double または long または int を使用することはできませんが、JSONObjectを使用することはできますが、これらのプリミティブを正常に処理できますが、 namevaluepairで不正な要求応答がある場合は、以下のサンプルを書きました。

 JSONObject juo = new JSONObject();
    juo.put("City", txtCity.getText().toString().trim().toString());
    juo.put("ClassNumber",
            Long.parseLong(txtClassNumber.getText().toString()
                    .trim()));
    juo.put("EmailAddress", txtEmail.getText().toString().trim()
            .toString());
    juo.put("ID", Long.parseLong(userid));
    juo.put("RealName", txtRealName.getText().toString().trim());
    juo.put("RealSurname", txtRealSurname.getText().toString()
            .trim());
    juo.put("School", txtSchool.getText().toString().trim());
    juo.put("UserId", Long.parseLong(userid));
    juo.put("UserName", username);
    juo.put("UserProfileImage", profileImageUrl);

    StringEntity entityForPost = new StringEntity(juo.toString());
    hpost.setHeader("content-type", "application/json");
    // hpost.setEntity(new UrlEncodedFormEntity(UpdateParams));
    hpost.setEntity(entityForPost);

    HttpResponse hres = hclient.execute(hpost);

    StatusLine status = hres.getStatusLine(); 
于 2015-02-02T03:44:03.043 に答える