【问题标题】:Android make http request within an AsyncTask and post an ArrayAndroid 在 AsyncTask 中发出 http 请求并发布一个数组
【发布时间】:2012-11-30 18:10:46
【问题描述】:

看似简单的问题,但在网上找不到明显的答案。

在此链接中,有一个教程介绍了如何从 android 应用程序中将简单的名称值对发布到文件中。 http://www.androidsnippets.com/executing-a-http-post-request-with-httpclient

我想要做的是发布可以在接收端(一个 php 脚本)作为数组访问的“东西”。

我想在 PHP 中接收:

$_POST['array']=array("key"=>"value","key2"=>"value2");

对于 android 开发相对较新,也许有人可以详细说明在 Java 中创建类似的东西,然后如何发送它 - setEntity 似乎只接受名称值对...

非常感谢

【问题讨论】:

    标签: android android-asynctask hashmap


    【解决方案1】:

    您应该在 Android 应用程序和 PHP 服务器中都使用 JSON Wrapper。

    在 PHP 中你应该使用json_decode(),比如:$thingFromPost = json_decode($data)

    在 Java 中,有很多方法可以创建 JSONArray。一个基本的例子是:

    List<String> list = new ArrayList<String>();
    list.add("foo");
    list.add("bar");
    JSONArray jsonArray = new JSONArray(list);
    

    然后,您只需将带有 HttpPost 的数组发送到您的服务器。

    StringEntity stringEntity = new StringEntity(jsonArray.toString());
    stringEntity.setContentEncoding(new BasicHeader(HTTP.CONTENT_ENCODING, "UTF-8"));
    stringEntity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
    
    HttpPost post = new HttpPost(url);          
    post.setEntity(stringEntity);
    post.setHeader(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
    

    如果您需要详细教程如何在 Android 中使用 JSON 发出请求,请关注this 链接。

    希望对你有帮助!

    【讨论】:

    • 但是当 setEntity 除了名称值对之外什么都不接受时,你怎么能发布这些数据呢?谢谢
    【解决方案2】:

    如果您希望 POST 的整个原始正文成为字符串化数组(仅此而已),我相信您应该使用 StringEntity 而不是 UrlEncodedFormEntity。

    所以这个:

    String s = "asdf"; // replace this with your JSON string
    StringEntity stringEntity = new StringEntity(s);
    httpPost.setEntity(stringEntity);
    

    我不熟悉 PHP,但从概念上讲,在接收端你会做类似 json.parse(request.full_body) 的事情。请注意,这(request.full_body 或等效项)与获取 POST 表单的单个值的常见模式(如 request['input_field1'])非常不同。

    但是,阅读您的问题,我并不完全确定这种 full_body 方法是您想要的。在我看来,您想通过表单变量“数组”访问数据,正如您在此处指出的那样:

    $_POST['array']=array("key"=>"value","key2"=>"value2");

    请注意,您在这里不是使用整个 POST 正文,而是获取一个名为“array”的表单变量的值(我想,我不太了解 PHP)。如果是这种情况,那么您应该使用 NameValuePairs,如下所示:

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("array", yourJSONArrayAsString));
    

    我相信这会将数组作为与表单变量“数组”关联的值发布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多