【问题标题】:Send a string on Android with HttpPost without using nameValuePairs在不使用 nameValuePairs 的情况下使用 HttpPost 在 Android 上发送字符串
【发布时间】:2013-04-18 10:04:21
【问题描述】:

我正在寻找有关如何在 android 上使用 HttpPost 方法发送信息的信息,但我总是看到:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(posturl);

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("Name","Var1"));
params.add(new BasicNameValuePair("Name2","Var2"));

httppost.setEntity(new UrlEncodedFormEntity(params));    
HttpResponse resp = httpclient.execute(httppost);
HttpEntity ent = resp.getEntity();

问题是我不能这样做,因为我必须连接到接收 XML 格式字符串的资源。

关于如何在不使用List&lt;nameValuePair&gt; 的情况下仅发送字符串的任何想法

【问题讨论】:

  • 您是如何想到上述代码与 XML 有任何关系的?另外,当您通过 http 发送字符串时,您的字符串需要一个名称,因此您最终会得到一个名称/值对或一个命名的 URL 参数。
  • 好的,请说明您的真正问题是什么。您是否有 XML 字符串并且服务器不能接受 XML 字符串值?然后你必须告诉我们服务器可以接受什么格式。或者您认为名称/值对与 XML 有关吗?那么答案是,不,它没有。它只是让您不必自己填写POST 正文。
  • 好的,服务器使用 javaScrip,他在上面读取了您发送给它的文本,该文本是 XML 文件或具有该格式。所以我不能使用 ValuePairs 因为我只需要发送一个字符串。但我在互联网上看到的方法只使用 ValuePairs 数组。现在我正在尝试使用 Praful Bhatnagar 的答案。我认为它会起作用
  • 感谢您的澄清。核心问题是,POSTJavaScript sn-p 有什么关系。您可以在 JavaScript 中请求数据,但您可以直接接收 POST 吗?我不这么认为。这意味着服务器之前接收它并通过请求变量将其传递给 JavaScript,在这种情况下,您使用 Praful 的方法是在浪费时间。
  • 好吧,我不知道为什么,但他的代码工作完美:) 太类了。

标签: android string http-post


【解决方案1】:

您是否尝试过使用StringEntity?上面的代码可以更新为使用StringEntity,生成的代码如下:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(posturl);


httppost.setEntity(new StringEntity("your string"));    
HttpResponse resp = httpclient.execute(httppost);
HttpEntity ent = resp.getEntity();

【讨论】:

  • 此方法仅适用于名为 file_get_contents('php://input') 的 php 函数,仅当我们使用 $_POST['content'] 时这是行不通的。为什么会这样?
【解决方案2】:

您可以使用 JSON 作为 post 参数。尝试引用FlexJson

【讨论】:

  • 我无法使用 JSON,服务器使用的是 JavaScript 文件
【解决方案3】:
// Sending HTTPs Requet to Server

    try {
        Log.v("GG", "Sending sever 1 - try");
        // start - line is for sever connection/communication
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(
                "10.0.0.1/abc.php");

        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
        nameValuePairs.add(new BasicNameValuePair("qrcode", contents));


        httppost.setEntity(new UrlEncodedFormEntity(
                nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        // end - line is for sever connection/communication
        InputStream is = entity.getContent();

        Toast.makeText(getApplicationContext(),
                "Send to server and inserted into mysql Successfully", Toast.LENGTH_LONG)
                .show();

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

        entity = response.getEntity();
        String getResult = EntityUtils.toString(entity);
        Log.e("response =", " " + getResult);



    } catch (Exception e) {
        Log.e("log_tag", "Error in http connection "
                + e.toString());
    }

【讨论】:

  • 这个问题很久以前就回答过了,但是你的回答不正确。您正在使用 NameValuePairs 列表,我只需要发送一个没有 NameValuePairs 的字符串。
猜你喜欢
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多