Android HttpClient、DefaultHttpClient、HttpPost [英] Android HttpClient, DefaultHttpClient, HttpPost

查看:19
本文介绍了Android HttpClient、DefaultHttpClient、HttpPost的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何将字符串数据 (JSONObject.toString()) 发送到 url.我想在一个 util 类中编写一个静态方法来做到这一点.我希望方法签名如下

public static String postData (String url, String postData) 抛出 SomeCustomException

字符串url的格式应该是什么

返回字符串是来自服务器的响应,以 json 数据的字符串表示形式.

编辑

当前连接工具

package my.package;导入 my.package.exceptions.CustomException;导入 java.io.BufferedReader;导入 java.io.InputStream;导入 java.io.InputStreamReader;导入 java.net.URLDecoder;导入 org.apache.http.HttpEntity;导入 org.apache.http.HttpResponse;导入 org.apache.http.client.HttpClient;导入 org.apache.http.client.methods.HttpGet;导入 org.apache.http.client.methods.HttpPost;导入 org.apache.http.entity.StringEntity;导入 org.apache.http.impl.client.DefaultHttpClient;公共类 ConnectionUtil {public static String postData(String url, String postData)抛出自定义异常{//创建一个新的 HttpClient 和 Post Header输入流是 = null;StringBuilder sb = null;字符串结果 = "";HttpClient httpclient = new DefaultHttpClient();HttpPost httppost = new HttpPost();httppost.setHeader("host", url);Log.v("ConnectionUtil", "打开 POST 连接到 URI = " + httppost.getURI() + " url = " + URLDecoder.decode(url));尝试 {httppost.setEntity(new StringEntity(postData));//执行 HTTP Post 请求HttpResponse 响应 = httpclient.execute(httppost);HttpEntity entity = response.getEntity();is = entity.getContent();} 捕获(异常 e){Log.e("log_tag", "http 连接错误" + e.toString());e.printStackTrace();throw new CustomException("无法建立网络连接");}尝试 {BufferedReader reader = new BufferedReader(new InputStreamReader(是, "utf-8"), 8);sb = 新的 StringBuilder();sb.append(reader.readLine() + "\n");字符串行 = "0";while ((line = reader.readLine()) != null) {sb.append(line + "\n");}is.close();结果 = sb.toString();} 捕获(异常 e){Log.e("log_tag", "错误转换结果" + e.toString());throw new CustomException("解析响应时出错");}Log.v("ConnectionUtil", "发送:"+postData);Log.v("ConnectionUtil", "得到结果"+result);返回结果;}}

Logcat 输出

<块引用>10-16 11:27:27.287: E/log_tag(4935): http 连接错误 java.lang.NullPointerException10-16 11:27:27.287: W/System.err(4935): java.lang.NullPointerException10-16 11:27:27.287: W/System.err(4935): 在 org.apache.http.impl.client.AbstractHttpClient.determineTarget(AbstractHttpClient.java:496)10-16 11:27:27.307:W/System.err(4935):在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)10-16 11:27:27.327:W/System.err(4935):在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)10-16 11:27:27.327:W/System.err(4935):在 in.gharpay.zap.integration.ConnectionUtil.postData(ConnectionUtil.java:92)10-16 11:27:27.327:W/System.err(4935):在 in.gharpay.zap.integration.ZapTransaction$1.doInBackground(ZapTransaction.java:54)10-16 11:27:27.327:W/System.err(4935):在 in.gharpay.zap.integration.ZapTransaction$1.doInBackground(ZapTransaction.java:1)10-16 11:27:27.327:W/System.err(4935):在 android.os.AsyncTask$2.call(AsyncTask.java:185)10-16 11:27:27.327:W/System.err(4935):在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)10-16 11:27:27.327:W/System.err(4935):在 java.util.concurrent.FutureTask.run(FutureTask.java:138)10-16 11:27:27.327:W/System.err(4935):在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)10-16 11:27:27.327:W/System.err(4935):在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)10-16 11:27:27.327:W/System.err(4935):在 java.lang.Thread.run(Thread.java:1019)10-16 11:27:27.327: V/log_tag(4935): 无法建立网络连接

解决方案

我认为在您的代码中,基本问题是由您使用 StringEntityPOST 的方式引起的参数到您的网址.检查以下代码是否有助于使用 StringEntity 将数据发布到服务器.

//构建JSON对象传递参数JSONObject jsonObj = new JSONObject();jsonObj.put("用户名", 用户名);jsonObj.put("data", dataValue);//创建POST对象并添加参数HttpPost httpPost = new HttpPost(url);StringEntity entity = new StringEntity(jsonObj.toString(), HTTP.UTF_8);entity.setContentType("application/json");httpPost.setEntity(实体);HttpClient 客户端 = 新的 DefaultHttpClient();HttpResponse 响应 = client.execute(httpPost);

希望这有助于解决您的问题.谢谢.

How would I send a string data (JSONObject.toString()) to a url. I want to write a static method in a util class to do this. I want the method signature to be as follows

public static String postData (String url, String postData) throws SomeCustomException

What should be the format of the string url

The return String is the response from the server in as a string representation of json data.

EDIT

Present connection util

package my.package;
import my.package.exceptions.CustomException;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URLDecoder;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;


 public class ConnectionUtil {

 public static String postData(String url, String postData)
        throws CustomException {

    // Create a new HttpClient and Post Header
    InputStream is = null;
    StringBuilder sb = null;
    String result = "";
    HttpClient httpclient = new DefaultHttpClient();

HttpPost httppost = new HttpPost();
    httppost.setHeader("host", url);

    Log.v("ConnectionUtil", "Opening POST connection to URI = " + httppost.getURI() + " url = " + URLDecoder.decode(url));

    try {
        httppost.setEntity(new StringEntity(postData));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();

    } catch (Exception e) {
        Log.e("log_tag", "Error in http connection " + e.toString());
        e.printStackTrace();
        throw new CustomException("Could not establish network connection");
    }
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "utf-8"), 8);
        sb = new StringBuilder();
        sb.append(reader.readLine() + "\n");
        String line = "0";

        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }

        is.close();
        result = sb.toString();

    } catch (Exception e) {
        Log.e("log_tag", "Error converting result " + e.toString());
        throw new CustomException("Error parsing the response");
    }
    Log.v("ConnectionUtil", "Sent: "+postData);
    Log.v("ConnectionUtil", "Got result "+result);
    return result;

}

}

Logcat output

10-16 11:27:27.287: E/log_tag(4935): Error in http connection java.lang.NullPointerException 10-16 11:27:27.287: W/System.err(4935): java.lang.NullPointerException 10-16 11:27:27.287: W/System.err(4935): at org.apache.http.impl.client.AbstractHttpClient.determineTarget(AbstractHttpClient.java:496) 10-16 11:27:27.307: W/System.err(4935): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 10-16 11:27:27.327: W/System.err(4935): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 10-16 11:27:27.327: W/System.err(4935): at in.gharpay.zap.integration.ConnectionUtil.postData(ConnectionUtil.java:92) 10-16 11:27:27.327: W/System.err(4935): at in.gharpay.zap.integration.ZapTransaction$1.doInBackground(ZapTransaction.java:54) 10-16 11:27:27.327: W/System.err(4935): at in.gharpay.zap.integration.ZapTransaction$1.doInBackground(ZapTransaction.java:1) 10-16 11:27:27.327: W/System.err(4935): at android.os.AsyncTask$2.call(AsyncTask.java:185) 10-16 11:27:27.327: W/System.err(4935): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 10-16 11:27:27.327: W/System.err(4935): at java.util.concurrent.FutureTask.run(FutureTask.java:138) 10-16 11:27:27.327: W/System.err(4935): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 10-16 11:27:27.327: W/System.err(4935): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 10-16 11:27:27.327: W/System.err(4935): at java.lang.Thread.run(Thread.java:1019) 10-16 11:27:27.327: V/log_tag(4935): Could not establish network connection

解决方案

I think in your code the basic problem is caused by the way you are using StringEntity to POST parameters to your url. Check to see if the following code helps in posting your data to the server using StringEntity.

    // Build the JSON object to pass parameters
    JSONObject jsonObj = new JSONObject();
    jsonObj.put("username", username);
    jsonObj.put("data", dataValue);

    // Create the POST object and add the parameters
    HttpPost httpPost = new HttpPost(url);
    StringEntity entity = new StringEntity(jsonObj.toString(), HTTP.UTF_8);
    entity.setContentType("application/json");
    httpPost.setEntity(entity);

    HttpClient client = new DefaultHttpClient();
    HttpResponse response = client.execute(httpPost);

Hope this helps in solving your problem. Thanks.

这篇关于Android HttpClient、DefaultHttpClient、HttpPost的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆