在android有很多网络请求,其中最为普遍的就是http请求,这里我们先简单说一下其中的HttpURLConnection,这个类是url连接类的子类,也是我们最常使用来做网络连接的类:
官网详细的介绍了用法:
需要通过url去获取连接,并且通过流读取的方法使用,在这里笔者小h也做了个小demo:
首先需要在你的androidManifest.xml中加入这个权限
<uses-permission android:name="android.permission.INTERNET"/>
其次在布局中加入一个webview,因为是测试使用,所以全屏即可:
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
然后就是代码了,也很简单,由于网络请求是耗时操作,我们先建一个类,让他继承线程:
public class HttpThread extends Thread {
private String url;
private WebView webView;
private Handler handler;
protected HttpThread(String url,WebView webView,Handler handler){
this.url = url;
this.webView = webView;
this.handler=handler;
}
@Override
public void run() {
try {
URL url1 = new URL(url);
HttpURLConnection connection = (HttpURLConnection) url1.openConnection();
connection.setReadTimeout(5000);
connection.setRequestMethod("GET");
final StringBuffer sb = new StringBuffer();
BufferedReader bd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String str = "";
while ((str = bd.readLine()) != null){
sb.append(str);
}
handler.post(new Runnable() {
@Override
public void run() {
webView.loadData(sb.toString(),"text/html;charset=utf-8",null);
}
});
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在构造函数中把需要传的值写好,要记住需要通过流进行读取操作,并且需用通过post去进行页面加载,不然会造成崩溃。然后再MainActivity传进参数即可:
public class MainActivity extends AppCompatActivity {
private WebView webView;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHandler = new Handler();
webView = (WebView) findViewById(R.id.webView);
new Thread(new Runnable() {
@Override
public void run() {
new HttpThread("http://blog.youkuaiyun.com/",webView,mHandler).run();
}
}).start();
}
}
在主线程中,不要进行耗时操作,需要自己创建新的线程去完成耗时操作,这里有多种写法,笔者只是简单的展示用法,最后结果如图: