android如何将int和double作为namevaluepair作为http post发送

Posted

技术标签:

【中文标题】android如何将int和double作为namevaluepair作为http post发送【英文标题】:android how to send int and double as namevaluepair as http post 【发布时间】:2012-10-17 09:45:30 【问题描述】:

我有一个应用程序,我正在尝试使用 http 帖子将数据发送到网络服务。用户数据是字符串 int 和 double 的混合。在应用程序中,所有都表示为字符串,因为当我使用 AsyncTask 运行网络调用时(因此它不在主线程上),params 数组的类型为字符串。

我遇到的问题是服务器有时需要一个 int。例如,compID 是服务器期望的 int。使用 http 帖子时,我使用 NameValuePair。这将只接受字符串。如何将 int 或 double 传递给 http 帖子?

在我的活动中。

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。我想知道的是如何在 NameValuePair 中将 compID 设为 int。 compID 作为字符串来自活动,但服务器需要一个 int。

【问题讨论】:

【参考方案1】:

你可以这样做:

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

TxType 是键,2 是值

【讨论】:

嗨,变量 compID 是一个字符串。 NameValuePair 将只接受 而不是 ,但服务器需要 如果可能的话,您可以更改服务器中的数据类型。我想这不会那么乏味。 我和主管聊过,他说我们也许可以改变服务器的期望。像你说的可能会更容易:)【参考方案2】:

只需像这样将您的字符串解析为整数

int result = Integer.parseInt(compID);

但您必须确保您的 compID 可以解析为整数。如果它包含不是数字的符号,则此操作将失败。为了确保 compID 是可解析的,你可以使用这个

if(compID.matches("(\\d+)")
    result = Integer.parseInt(compId); 

【讨论】:

嗨,这是我遇到的问题。如果我去 nameValuePairs.add(new BasicNameValuePair("CompanyID", Integer.parseInt(compID))); Eclipse 抱怨 String, int 未定义 NameValuePair 试试 nameValuePairs.add(new BasicNameValuePair("CompanyID", ((int)Integer.parseInt(compID)))); BasicNameValuePair的构造函数是(String, String),所以不起作用。 所以......你的问题是服务器只接受 int,但从应用程序你只能发送字符串? 是的,Astorvald 做对了。构造函数是字符串字符串。我需要将 String, int 发送到服务器。那么除了 NameValePair 之外,还有其他数据结构可以处理这个问题吗?【参考方案3】:

这个问题已经很久没有问过了,但我想帮助那些登陆这个页面的人。如上面的论点,您不能在 namevaluepair 中使用 doubles 或 longs 或 ints,但您可以使用 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(); 

【讨论】:

以上是关于android如何将int和double作为namevaluepair作为http post发送的主要内容,如果未能解决你的问题,请参考以下文章

如何将int转换成double

在QT中如何将double转换为Qstring

如何将table转换为double型数组?

在C#中如何将int类型强制转换为double类型

Scala 如何将 Int 转换为 Double?

如何在 Java 中使用 double to int cast