Android-非常棒的HTTP通讯总结

来源:互联网 发布:python 字符串 编辑:程序博客网 时间:2024/04/30 15:25

这里有一个非常棒的http通讯的总结,我看了以后茅塞顿开。

先贴代码:

01public class Activity1 extends Activity {
02 
03    private final String DEBUG_TAG = "System.out";
04 
05    private TextView mTextView;
06    private Button mButton;
07 
08    protected void onCreate(Bundle savedInstanceState) {
09        super.onCreate(savedInstanceState);
10        setContentView(R.layout.main);
11 
12        mTextView = (TextView) findViewById(R.id.TextView01);
13        mButton = (Button) findViewById(R.id.Button01);
14        mButton.setOnClickListener(new httpListener());
15    }
16 
17    // 设置按钮监听器
18    class httpListener implements OnClickListener {
19        public void onClick(View v) {
20            refresh();
21        }
22    }
23 
24    private void refresh() {
25        String httpUrl = "http://192.168.0.101:8080/Test/test.jsp";
26        // URL可以加参数
27        // String httpUrl =
28        // "http://192.168.0.101:8080/Test/test.jsp?par=abcdefg";
29        String resultData = "";
30        URL url = null;
31        try {
32            // 创建一个URL对象
33            url = new URL(httpUrl);
34        catch (MalformedURLException e) {
35            Log.d(DEBUG_TAG, "create URL Exception");
36        }
37        // 声明HttpURLConnection对象
38        HttpURLConnection urlConn = null;
39        // 声明InputStreamReader对象
40        InputStreamReader in = null;
41        // 声明BufferedReader对象
42        BufferedReader buffer = null;
43        String inputLine = null;
44        if (url != null) {
45            try {
46                // 使用HttpURLConnection打开连接
47                urlConn = (HttpURLConnection) url.openConnection();
48                // 得到读取的内容(流)
49                in = new InputStreamReader(urlConn.getInputStream());
50                // 创建BufferReader对象,输出时候用到
51                buffer = new BufferedReader(in);
52                // 使用循环来读取数据
53                while ((inputLine = buffer.readLine()) != null) {
54                    // 在每一行后面加上换行
55                    resultData += inputLine + "\n";
56                }
57                // 设置显示取的的内容
58                if (resultData != null && !resultData.equals("")) {
59                    mTextView.setText(resultData);
60                else {
61                    mTextView.setText("读取的内容为空");
62                }
63            catch (IOException e) {
64                e.printStackTrace();
65            finally {
66                try {
67                    // 关闭InputStreamReader
68                    in.close();
69                    // 关闭URL连接
70                    urlConn.disconnect();
71                catch (IOException e) {
72                    e.printStackTrace();
73                }
74            }
75        else {
76            Log.d(DEBUG_TAG, "URL is NULL");
77        }
78    }
79}

 


第二种方式:

001public class Activity2 extends Activity {
002 
003    private final String DEBUG_TAG = "System.out";
004 
005    private TextView mTextView;
006    private Button mButton;
007 
008    protected void onCreate(Bundle savedInstanceState) {
009        super.onCreate(savedInstanceState);
010        setContentView(R.layout.main);
011 
012        mTextView = (TextView) findViewById(R.id.TextView01);
013        mButton = (Button) findViewById(R.id.Button01);
014        mButton.setOnClickListener(new httpListener());
015    }
016 
017    // 设置按钮监听器
018    class httpListener implements OnClickListener {
019        public void onClick(View v) {
020            refresh();
021        }
022    }
023 
024    private void refresh() {
025        String httpUrl = "http://192.168.0.101:8080/Test/test.jsp";
026        String resultData = "";
027        URL url = null;
028        try {
029            // 创建一个URL对象
030            url = new URL(httpUrl);
031        catch (MalformedURLException e) {
032            Log.d(DEBUG_TAG, "create URL Exception");
033        }
034        // 声明HttpURLConnection对象
035        HttpURLConnection urlConn = null;
036        // 声明InputStreamReader对象
037        InputStreamReader in = null;
038        // 声明BufferedReader对象
039        BufferedReader buffer = null;
040        String inputLine = null;
041        // 声明DataOutputStream流
042        DataOutputStream out = null;
043        if (url != null) {
044            try {
045                // 使用HttpURLConnection打开连接
046                urlConn = (HttpURLConnection) url.openConnection();
047                // 因为这个是POST请求所以要设置为true
048                urlConn.setDoInput(true);
049                urlConn.setDoOutput(true);
050                // 设置POST方式
051                urlConn.setRequestMethod("POST");
052                // POST请求不能设置缓存
053                urlConn.setUseCaches(false);
054                urlConn.setInstanceFollowRedirects(false);
055                // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
056                urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
057                // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成
058                // 要注意的是connectio.getOutputStream会隐含的进行connect
059                urlConn.connect();
060                // DataOutputStream流
061                out = new DataOutputStream(urlConn.getOutputStream());
062                String content = "par=" + URLEncoder.encode("abcdefg""gb2312");
063                // 将要上传的内容写入流中
064                out.writeBytes(content);
065                // 得到读取的内容(流)
066                in = new InputStreamReader(urlConn.getInputStream());
067                // 创建BufferReader对象,输出时候用到
068                buffer = new BufferedReader(in);
069                // 使用循环来读取数据
070                while ((inputLine = buffer.readLine()) != null) {
071                    // 在每一行后面加上换行
072                    resultData += inputLine + "\n";
073                }
074                // 设置显示取的的内容
075                if (resultData != null && !resultData.equals("")) {
076                    mTextView.setText(resultData);
077                else {
078                    mTextView.setText("读取的内容为空");
079                }
080            catch (IOException e) {
081                e.printStackTrace();
082            finally {
083                try {
084                    // 刷新DataOutputStream流
085                    out.flush();
086                    // 关闭DataOutputStream流
087                    out.close();
088                    // 关闭InputStreamReader
089                    in.close();
090                    // 关闭URL连接
091                    urlConn.disconnect();
092                catch (IOException e) {
093                    e.printStackTrace();
094                }
095            }
096        else {
097            Log.d(DEBUG_TAG, "URL is NULL");
098        }
099    }
100}

 

第三种方式

01public class Activity3 extends Activity{
02    private TextView mTextView;
03    private Button mButton;
04 
05    protected void onCreate(Bundle savedInstanceState) {
06        super.onCreate(savedInstanceState);
07        setContentView(R.layout.main);
08        mTextView = (TextView) findViewById(R.id.TextView01);
09        mButton = (Button) findViewById(R.id.Button01);
10        mButton.setOnClickListener(new httpListener());
11    }
12 
13    // 设置按钮监听器
14    class httpListener implements OnClickListener {
15        public void onClick(View v) {
16            String httpUrl = "http://192.168.0.101:8080/Test/test.jsp?par=HttpClient_android_Get";
17            // HttpGet连接对象
18            HttpGet httpRequest = new HttpGet(httpUrl);
19            try {
20                // 取的HttpClient对象
21                HttpClient httpclient = new DefaultHttpClient();
22                // 请求HttpClient,取的HttpResponse
23                HttpResponse httpResponse = httpclient.execute(httpRequest);
24                // 请求成功
25                if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
26                    // 取的返回的字符串
27                    String strResult = EntityUtils.toString(httpResponse.getEntity());
28                    // 这个返回值可能会在行尾出现小方格
29                    // 在TextView要显示的文字过滤掉回车符("\r")就可以正常显示了。
30                    String strsResult = strResult.replace("\r""");
31                    mTextView.setText(strsResult);
32                else {
33                    mTextView.setText("请求错误");
34                }
35            catch (ClientProtocolException e) {
36                mTextView.setText(e.getMessage().toString());
37            catch (IOException e) {
38                mTextView.setText(e.getMessage().toString());
39            catch (Exception e) {
40                mTextView.setText(e.getMessage().toString());
41            }
42        }
43    }
44}

 

第四种方式

01public class Activity4 extends Activity{
02    private TextView mTextView;
03    private Button mButton;
04 
05    protected void onCreate(Bundle savedInstanceState) {
06        super.onCreate(savedInstanceState);
07        setContentView(R.layout.main);
08        mTextView = (TextView) findViewById(R.id.TextView01);
09        mButton = (Button) findViewById(R.id.Button01);
10        mButton.setOnClickListener(new httpListener());
11    }
12 
13    // 设置按钮监听器
14    class httpListener implements OnClickListener {
15        public void onClick(View arg0) {
16            String httpUrl = "http://192.168.0.101:8080/Test/test.jsp";
17            // 创建HttpPost连接对象
18            HttpPost httpRequest = new HttpPost(httpUrl);
19            // 使用NameValuePair来保存要传递的Post参数
20            List params = new ArrayList();
21            // 添加要传递的参数
22            params.add(new BasicNameValuePair("par","HttpClient_android_Post"));
23            try {
24                // 设置字符集
25                HttpEntity httpentity = new UrlEncodedFormEntity(params,"gb2312");
26                // 请求httpRequest
27                httpRequest.setEntity(httpentity);
28                // 取的默认的HttpClient
29                HttpClient httpclient = new DefaultHttpClient();
30                // 取的HttpResponse
31                HttpResponse httpResponse = httpclient.execute(httpRequest);
32                // HttpStatus.SC_OK表示连接成功
33                if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
34                    // 取的返回的字符串
35                    String strResult = EntityUtils.toString(httpResponse.getEntity());
36                    // 这个返回值可能会在行尾出现小方格
37                    // 在TextView要显示的文字过滤掉回车符("\r")就可以正常显示了。
38                    String strsResult = strResult.replace("\r""");
39                    mTextView.setText(strsResult);
40                else {
41                    mTextView.setText("请求错误");
42                }
43            catch (ClientProtocolException e) {
44                mTextView.setText(e.getMessage().toString());
45            catch (IOException e) {
46                mTextView.setText(e.getMessage().toString());
47            catch (Exception e) {
48                mTextView.setText(e.getMessage().toString());
49            }
50        }
51    }
52}
原创粉丝点击