对HTTPCONNECTION的理解
来源:互联网 发布:win10关闭网络唤醒 编辑:程序博客网 时间:2024/05/20 03:37
首先写一个工具类HttpConnection
package com.example.pc.httpconnectiontest;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;/** * Created by pc on 2016/4/18. * <p/> * 工具类 */public class HttpConnectionUtil { public static String getHttpContent(String url) { return getHttpContent(url, "UTF-8"); } private static String getHttpContent(String url, String charSet) { HttpURLConnection connection = null; String content = ""; try { URL address_url = new URL(url); connection = (HttpURLConnection) address_url.openConnection(); connection.setRequestMethod("GET"); //设置访问超时时间及读取网页流的超市时间,毫秒值 connection.setConnectTimeout(1000); connection.setReadTimeout(1000); //得到访问页面的返回值 int response_code = connection.getResponseCode(); if (response_code == HttpURLConnection.HTTP_OK) { InputStream inputStream = connection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, charSet)); //把字节流读取出来 String line = ""; while ((line = bufferedReader.readLine()) != null) { content += line; } return content; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (connection != null) { connection.disconnect(); } } return ""; } // 添加post请求 public static String getHttpContent2() { try {// URL url2 = new URL("你请求的post参数前面的网址"); URL url2 = new URL("http://fanyi.youdao.com/openapi.do"); HttpURLConnection connection = (HttpURLConnection) url2.openConnection(); //设置 编码方式 (可以)输入输出 以及请求的方法 connection.addRequestProperty("encoding","UTF-8"); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestMethod("POST"); OutputStream os = connection.getOutputStream(); //把字节流转换为字符流 OutputStreamWriter osw = new OutputStreamWriter(os); BufferedWriter bw = new BufferedWriter(osw);// bw.write("你请求的post参数"); bw.write("keyfrom=zhanghappyzq&key=301249901&type=data&doctype=xml&version=1.1&q=congratulation"); bw.flush(); InputStream is = connection.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; StringBuilder stringBuilder = new StringBuilder(); while ((line = br.readLine()) != null) { stringBuilder.append(line); } bw.close(); osw.close(); os.close(); br.close(); isr.close(); is.close(); System.out.println(stringBuilder.toString()); return stringBuilder.toString(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return ""; }}
然后在MainActivity中显示出来,在MainActivity中用到 Handler
package com.example.pc.httpconnectiontest;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.Toast;import java.io.IOException;public class MainActivity extends AppCompatActivity { private String content; private String str_noBuf; private String str_Buf; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.button); Button button2 = (Button) findViewById(R.id.button2); Button button3 = (Button) findViewById(R.id.button3); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread(new Runnable() { @Override public void run() { //网络Connection请求方面// content = HttpConnectionUtil.getHttpContent("http://www.baidu.com"); content = HttpConnectionUtil.getHttpContent2(); if (content != null && content != "") { Message message = mhandler.obtainMessage(); message.what = 1; message.obj = ""; mhandler.sendMessage(message); } } }).start(); } }); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread(new Runnable() { @Override public void run() { //InputStreamReaderTest nobuf try { str_noBuf = InputStreamReaderTest.transReadNoBuf(); Log.d("MainActivity","str_noBuf?"); } catch (IOException e) { e.printStackTrace(); } if (str_noBuf != null && str_noBuf != "") { Message message = mhandler.obtainMessage(); message.what = 2; mhandler.sendMessage(message); } Log.d("MainActivity","str_noBuf=="+str_noBuf); } }).start(); } }); button3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread(new Runnable() { @Override public void run() { //InputStreamReaderTest buf try { str_Buf = InputStreamReaderTest.transReadNoBuf(); } catch (IOException e) { e.printStackTrace(); } if (str_Buf != null && str_Buf != "") { Message message = mhandler.obtainMessage(); message.what = 3; mhandler.sendMessage(message); } } }).start(); } }); } private Handler mhandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 1: Toast.makeText(MainActivity.this, content, Toast.LENGTH_LONG).show(); Log.d("MainActivity", content); break; case 2: Toast.makeText(MainActivity.this, str_noBuf, Toast.LENGTH_LONG).show(); Log.d("MainActivity", str_noBuf); break; case 3: Toast.makeText(MainActivity.this, str_Buf, Toast.LENGTH_LONG).show(); Log.d("MainActivity", str_Buf); break; default: break; } } };}
布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:orientation="vertical" tools:context=".MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Button1" android:id="@+id/button" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Button2" android:id="@+id/button2" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Button3" android:id="@+id/button3" /></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.pc.httpconnectiontest" > <uses-permission android:name="android.permission.INTERNET"/> <!--往sdcard中写入数据的权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!--在sdcard中创建/删除文件的权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
出现的错误以及解决方案:
一般形如:Unable to resolve host "www.xxxx.com" : No address associated with hostname
碰到这个问题是在android系统中。
检测如下几点:
1. 浏览器使用了proxy,但是你的app没有。设置
- System.setProperty("http.proxyHost", "my.proxyhost.com");
- System.setProperty("http.proxyPort", "1234");
3. 是不是SSL的原因。
自己的遇到这个问题,最终发现是app的网络设置有问题,改正后,就可以连接网络了
thanks for http://blog.csdn.net/cctt_1/article/details/8595791.
另外为什么不用 Message message = new Message(); 而用 Message message =mhandler.obtainMessage();
通过比较我们会发现,这两种获取Message的实例的方法不一样,于是我看了源码,果然不一样:
查看obtainMessage()源码:
图1:
进入obtain方法:
图2:
再进入objtain方法:
图3:
进入Message方法:
图4:
总结:
上面的图3中obtain方法的注释中说得很明白:从整个Messge池中返回一个新的Message实例,在许多情况下使用它,因为它能避免分配新的对象
如果是这样的话,那么通过调用obtainMessage方法获取Message对象就能避免创建对象,从而减少内存的开销。
1 0
- 对HTTPCONNECTION的理解
- HttpConnection联网的速度
- HttpConnection的get请求
- HttpConnection
- httpClient和httpconnection的区别
- httpClient和httpconnection的区别
- 返回通用认证的HttpConnection对象
- java HttpConnection的post和get传参
- Android的HttpConnection和HttpClient发送请求
- 对博客的理解
- 对动力的理解
- 对类的理解
- 对package的理解
- 对IRP的理解
- 对接口的理解
- 对String的理解
- 对https的理解
- 对SPRING的理解
- 面向对象
- 学习笔记--Ajax:JSON格式返回数据
- Spring4.1.4 bean的加载与赋值
- 21. Merge Two Sorted Lists
- 读C#线程及线程池笔记
- 对HTTPCONNECTION的理解
- jsp的3个编译指令,7个动作指令,9个内置对象
- "remote:error:refusing to update checked out branch:refs/heads/master"的解决办法
- 淘宝秒杀系统
- iOS使用CocoaPods安装失败解决办法
- JavaScript的设计缺陷?浮点运算:0.1 + 0.2 != 0.3
- poj-3299-Humidex
- python if __name__ == '__main__':(有例子就是好理解)
- OAuth