package com.example.unit3_requestdata_asynctask_demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
private ProgressDialog pd;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
}
public void requestjoke(View v){
//1.构造出来
MyTask myTask=new MyTask();
myTask.execute("http://japi.juhe.cn/joke/content/list.from?sort=asc&page=1&pagesize=10&time=1418816972&key=fae8fe09dba9d27aab24308a21b53bce");
}
//定义异步任务
//1.Params 一般是请求的网址 String Void
//2.Progress 请求网络数据的进度 一般是 Integer void
//3.Result 请求网络数据得到的结果 json xml String Void 自定义一个对象 List<?>
class MyTask extends AsyncTask<String, Void, String>{
//请求网络 的代码
@Override
protected String doInBackground(String... arg0) {//String... 可变长类型 相当于String[]
String str="";
try {
//1.根据路径创建一个URL对象
URL url=new URL(arg0[0]);
//2.打开连接
HttpURLConnection openConnection = (HttpURLConnection)url.openConnection();
//3.进行设置
openConnection.setRequestMethod("GET");
openConnection.setReadTimeout(3000);
openConnection.setConnectTimeout(3000);
//4.得到响应码
int code=openConnection.getResponseCode();
if(code==200){
//5.得到数据
InputStream inputStream = openConnection.getInputStream();
str=streamToString(inputStream);
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
//在执行操作之前
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
//创建一个进度对话框,并显示出来
pd=new ProgressDialog(MainActivity.this);
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);//小圆 设置样式
pd.setMessage("正在请求,请稍后...");
pd.show();
}
//在执行操作之后
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if(pd!=null && pd.isShowing()){
//关闭对话框
pd.dismiss();
}
//显示
tv.setText(result);
}
}
/**
* 将字节流信息的内容读取出来
* @param is
* @return
*/
public String streamToString(InputStream is){
StringBuilder builder=new StringBuilder();
BufferedReader reader=new BufferedReader(new InputStreamReader(is));
String con;
try {
while((con=reader.readLine())!=null){
builder.append(con);
}
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return builder.toString();
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="请求笑话数据"
android:onClick="requestjoke"
android:id="@+id/btn"/>
<TextView android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tv"
android:layout_below="@+id/btn"
android:textColor="#00f"/>
</RelativeLayout>