首先写一个工具类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对象就能
避免创建对象,从而减少内存的开销
。