【问题标题】:Android – Is it possible to make an Http-Post with non-String parameters?Android – 是否可以使用非字符串参数制作 Http-Post?
【发布时间】:2012-04-14 10:53:09
【问题描述】:

我正在实现一个 android 应用程序,我想在其中使用来自服务器的一些方法(我没有实现)。现在,当我尝试制作一个必须仅传递字符串参数的 http-post 时,一切都可以使用如下代码正常工作:

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);

nameValuePairs.add(new BasicNameValuePair("user[email]", email));
nameValuePairs.add(new BasicNameValuePair("user[password]", password));

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

ResponseHandler<String> responseHandler=new BasicResponseHandler();
String responseBody = httpclient.execute(httppost, responseHandler);
JSONObject response=new JSONObject(responseBody);   
System.out.println("RESPONSE " + response.toString());

我得到一个 json 对象的响应,我可以很容易地使用它来获取我想要的属性。

现在有些方法需要非字符串值(整数或布尔值)作为参数。我不能在List&lt;NameValuePair&gt; 之类的列表中传递这些参数,因为这只需要字符串。我也尝试将它作为 json 对象传递,但没有成功。

所以我的第一个问题是http post中是否可以有非字符串参数?如果是,应该怎么做?例如,如果在上面的代码中电子邮件是一个整数,密码是一个布尔值(在示例中),我应该如何处理它们?

提前谢谢大家!

【问题讨论】:

  • 只是传递他们的字符串表示?
  • 你的意思是“1”代表1?但是服务器等待我认为的整数。所以我得到一个 IO 异常,我认为是因为这个.. 是不是有一些方法可以传递非 String 或 http-post 不允许它?
  • 是否有一个功能正常的网页可以发布到您尝试使用的服务器资源?如果是这样,您是否可以使用类似 Firefox 的 HttpFox 插件或其他流量嗅探器来查看成功的 HTTP 请求的外观并模仿其格式?
  • 不,这是一些人为我应该制作客户端的项目制作的服务器。我是第一个使用它的人。我可能会要求他们将所有内容都作为字符串接收并从他们这边工作(从字符串解析整数等),但我想了解我是否错了,这可以通过 http-post 和非字符串参数来完成。

标签: android json parameters arguments http-post


【解决方案1】:

当然,考虑文件上传。

文件是二进制文件(好的,如果有人认为文本不够二进制,请考虑上传图片)

技术是http-post

【讨论】:

  • 是的,我想到了.. 但我不知道是否所有内容都作为字符串发送并从服务器解码.. 那么我应该如何传递非字符串参数?
  • 这个链接非常有用。但是,它使用 urlconnection 进行通信 stackoverflow.com/questions/2793150/…
  • 您必须知道要获取/发布到的资源的 API 和合同。
【解决方案2】:

所有的http请求参数都会以字符串的形式出现,但是服务器端代码可以转换它们。例如,服务器可以从请求参数中获取 JSON 字符串并将其转换为包含任意数量的序列化数据的对象。这可能包括整数、列表等。

虽然实现将取决于该服务器端代码。例如,客户端和服务器都可以使用 GSON 来回发送对象和列表。

public void doPost(...)
{
    String param = request.getParameter("someParam");
    MyCustomObject myCustomObject = (MyCustomObject)gson.fromJson(param, MyCustomObject.class);
}

【讨论】:

  • 所以在这段代码中,您获取从服务器请求的参数作为字符串,然后将其形成为您想要的任何其他类型?之后如何将其传递给服务器?我很困惑..
  • “所有 http 请求参数都将以字符串形式出现”对于 post var 来说是错误的。只有 url 参数将是“字符串”
  • 所有可以通过request.getParameter访问的请求参数,如上例所示,以字符串形式出现:docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
相关资源
最近更新 更多