Android上发送http请求一般有两种方法,通过HttpUrlConnection和HttpClient都可以实现,但是在android6.0以后,HttpClient已经被移除了,所以我们今天主要讲解HttpUrlConnection的基本用法。
我们还是通过一个例子来进行讲解,就是最简单的得到百度网站的html代码的一个例子。
先说一下我们项目的最终结果:
如图所示,当我点击click按钮时,会在下方的TextView中显示百度的html代码。
首先新建一个项目,修改layout的代码,添加一个Button和TextView控件,如果希望TextView可以滚动,则在其外面包裹上ScrollView,具体代码如下:
<Button
android:text="click"
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<ScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</ScrollView>
设计好界面以后,开始进行Activity的编写
首先先定义好需要用到的控件并通过findViewById为其赋值内容
之后为Button添加点击事件
由于android规定访问网络这种耗时的工程不允许在主线程中进行,所以我们需要在子线程中进行操作
HttpUrlConnection需要用到一个URL对象来开启连接,所以我们先定义一个URL对象
URL url=new URL("https://www.baidu.com"):
接着定义一个HttpUrlConnection的对象,并通过url开启
HttpUrlConnection conn=url.openConnection();
之后再为conn设置请求方式、连接延迟和读取延迟
conn.setRequestMethod("GET"):
conn.setConnectionTimeout(8000);
conn.setReadTimeout(8000);
要读取百度发回来的请求信息,我们需要用流来处理
InputStream in=conn.getInputStream();
BufferReader br=new BufferReader(new InputStreamReader(in));
得到百度返回的输入流以后,我们要从里面的到内容,在这里,我选择用StringBuilder来处理
StringBuilder sb=new StringBuilder();
String s;
while((s=br.readLine())!=null){
sb.append(s);
}
String result=sb.toString();
最终我们得到了结果result,注意将result赋值给TextView时别忘了再主线程中进行。
下面是全部的代码
package com.example.testwebview;
public class MainActivity extends AppCompatActivity {
Button button;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button= (Button) findViewById(R.id.button);
textView= (TextView) findViewById(R.id.textView);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("haha","go");
run1();
}
});
}
private void run1() {
new Thread(new Runnable() {
@Override
public void run() {
Log.d("haha","go1");
HttpURLConnection conn=null;
BufferedReader br=null;
try {
URL url=new URL("https://www.baidu.com/");
conn= (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(8000);
conn.setReadTimeout(8000);
InputStream in=conn.getInputStream();
br=new BufferedReader(new InputStreamReader(in));
StringBuilder sb=new StringBuilder();
String s;
while((s = br.readLine())!=null){
sb.append(s);
}
setContent(sb.toString());
Log.d("123","---"+sb.toString());
} catch (Exception e) {
e.printStackTrace();
Log.d("haha",e.getMessage());
}finally {
if (conn!=null){
conn.disconnect();
}
if (br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}).start();
}
public void setContent(final String s) {
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText(s);
Log.d("haha",s);
}
});
}
}
今天的小例子就算做完了,赶紧试试吧!