【问题标题】:Sending Json POST to server using name value pair使用名称值对向服务器发送 Json POST
【发布时间】:2013-11-10 01:08:34
【问题描述】:

我通过 url 向服务器发送 Json Post 请求:http://www.xyz.com/login

请求结构:

{"requestdata":{"password":"abc","devicetype":"phone","username":"amrit@pqr.com","locale":"in"},"requestcode":10}

代码快照:

MainActivity:

    // Building post parameters
    // key and value pair
    List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
    nameValuePair.add(new BasicNameValuePair("requestcode", "10"));
    nameValuePair.add(new BasicNameValuePair("devicetype", "phone"));
    nameValuePair.add(new BasicNameValuePair("locale", "in"));
    nameValuePair.add(new BasicNameValuePair("username", "amrit@pqr.com"));
    nameValuePair.add(new BasicNameValuePair("password", "abc"));

    RestPost post = new RestPost(loginUrl, nameValuePair);
    String Response = post.postData();
    Log.i("Response:", Response);

RestPost 类

    import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStream;
      import java.io.InputStreamReader;
      import java.util.List;
      import org.apache.http.HttpEntity;
      import org.apache.http.HttpResponse;
      import org.apache.http.NameValuePair;
      import org.apache.http.StatusLine;
      import org.apache.http.client.ClientProtocolException;
      import org.apache.http.client.HttpClient;
      import org.apache.http.client.entity.UrlEncodedFormEntity;
      import org.apache.http.client.methods.HttpPost;
      import org.apache.http.impl.client.DefaultHttpClient;
      import android.util.Log;

     public class RestPost {
       String url;
       List<NameValuePair> nameValuePairs;

    public RestPost(String str, List<NameValuePair> params) {
        this.url = str;
        this.nameValuePairs = params;
    }

    public String postData() {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(this.url);
        StringBuilder builder = new StringBuilder();

        try {
            httppost.setEntity(new UrlEncodedFormEntity(this.nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();
            Log.d("RestClient", "Status Code : " + statusCode);

            HttpEntity entity = response.getEntity();
            InputStream content = entity.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    content));
            String line;
            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
        } catch (IOException e) {
            // TODO Auto-generated catch block
        }
        return builder.toString();
    }
}

但是我没有得到适当的响应,任何人都可以帮助我发送适当的格式以获取服务器响应。提前致谢。

我得到的回应:

{"error":{"resultCode":"400","status":"Invalid Request format"}}

【问题讨论】:

  • 你能发布完整的错误
  • 您是否尝试将 json 对象发布到服务器,因为您现在的编码方式会发送 POST 值

标签: java android json androidhttpclient


【解决方案1】:

您当前正在以

的形式发送 JSON
{
    "requestcode": "10",
    "devicetype": "phone",
    "locale": "in",
    "username": "amrit@pqr.com",
    "password": "abc"
}

这不是服务器要求的形式。尝试创建要发送的 JSON 字符串。然后使用:

httppost.setEntity(new StringEntity(jsonString, "UTF8"));
httppost.setHeader("Content-type", "application/json");

将字符串发送到服务器。

【讨论】:

    【解决方案2】:

    我正在使用 AndroidHttpClient 发布请求

    AndroidHttpClient httpClient = AndroidHttpClient.newInstance("User Agent");
    
    URL urlObj = new URL(url);
    HttpHost host = new HttpHost(urlObj.getHost(), urlObj.getPort(), urlObj.getProtocol());
    AuthScope scope = new AuthScope(urlObj.getHost(), urlObj.getPort());
    HttpContext credContext = new BasicHttpContext();
    HttpPost httpPost = new HttpPost (url);
    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairsArrayList));
    
    // Execute post request and get http response
    HttpResponse httpResponse = httpClient.execute(host, httpPost, credContext);
    httpClient.close();
    

    这对我来说非常适合。

    【讨论】:

      【解决方案3】:
      AndroidHttpClient http = AndroidHttpClient.new Instance("hai");
      

      【讨论】:

        猜你喜欢
        • 2016-04-05
        • 1970-01-01
        • 2017-06-19
        • 1970-01-01
        • 2012-08-16
        • 2017-05-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多