Android как отправить int и double как namevaluepair как http post

У меня есть приложение, в котором я пытаюсь отправить данные в веб-сервис, используя http-сообщение. Пользовательские данные представляют собой смесь строк int и double. В приложении все представлены как строки, так как я использую AsyncTask для запуска сетевого вызова (так что это не в основном потоке), массив params имеет тип String.

Проблема в том, что сервер иногда ожидает int. Например compID – это int, который ожидает сервер. При использовании http post я использую 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 некоторые из значений теперь установлены на нуль. Я хотел бы знать, как сделать compID int в NameValuePair. CompID переходит из действия как String, но сервер ожидает int.

Вы можете сделать что-то вроде этого:

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

TxType – это ключ, а 2 – значение

Просто проанализируйте свою строку с целым рядом

 int result = Integer.parseInt(compID); 

Но вы должны быть уверены, что ваш compID можно разобрать Integer. Если он содержит символы, которые не являются цифрами, эта операция завершится с ошибкой. Чтобы убедиться, что compID является синтаксическим, вы можете использовать этот

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

Это давно было задано, но я хочу помочь тем, кто приземляется на этой странице. Как и в приведенном выше аргументе, вы не можете использовать удвоения или longs или ints в namevaluepair, но вы можете использовать JSONObject , он может успешно обрабатывать эти примитивы, тогда как у вас есть ответ «Плохой запрос» с именемvaluepair , я написал образец ниже.

  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();