原生网络请求
/* 1.创建一个子线程
* 2.定位资源url
* new URL
* 3.连接服务器
* url.open()
* conn.setRequestMethod("GET");
* 4.获取响应码检测是否连接成功
* 5.成功后进行响应操作,获取字节输入流 并转换成字符流
* getInputStream();
* 304-重复获取资源
* 206-多线程下载,成功了一部分
* 6.获取textview
* 7.在主线程中设置text
* */
private void doGet() {
new Thread() {
public void run() {
try {
String urlPath = "http://192.168.35.180/login/login?username=lean&pwd=123456";
URL url = new URL(urlPath);
HttpURLConnection conn =(HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
int rsp =conn.getResponseCode();
if(rsp==200){
InputStream is = conn.getInputStream();
final BufferedReader reader = new BufferedReader(new InputStreamReader(is));
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
mTv.setText(reader.readLine());
} catch (Exception e) {
}
}
});
}
} catch (Exception e) {
Log.v("meeeeeee", "报错");
}
}
}.start();
}
/* 1.创建一个线程
* 2.创建url 打开连接
* 3.设置请求参数
* 1.修改请求方式
* setrequestMethod("post");
* 2.设置请求头
* setRequestProperty();
* 3.设置请求数据
* 4.获取响应码进行判断
* 5.获取资源
* 6.断开连接
* */
private void doPost(final String name ,final String pwd){
new Thread() {
public void run() {
try {
URL url = new URL("http://192.168.35.180/loginPost/login");
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
//区别:post请求会将参数传入请求头中,而不是暴露在网址中
String params = "username="+name+"&pwd="+pwd;
conn.setRequestProperty("Content-Length", params.length()+"");
//将请求参数通过输出流写到服务器
OutputStream os = conn.getOutputStream();
os.write(params.getBytes());
if(conn.getResponseCode()==200){
InputStream is = conn.getInputStream();
loadLoginResource(is);
}
// conn.disconnect();
} catch (Exception e) {
}
}
}.start();
}
HttpClient框架
/* 1.创建子线程
* 2.创建HttpClient
* 3.创建getpost对象并传入url
* 4.new一个 urlencodeformentity用来设置请求头
* 1.ArrayList<BasicNameValuePair> param
* 2.param.add(new BasicNmaeVauePair(key,value);)
* 3.new UrlEncodeFormEntity(param);
* */
private void doPost(final String name, final String pwd) {
new Thread() {
public void run() {
try {
DefaultHttpClient client = new DefaultHttpClient();
String url = "http://192.168.35.180/loginPost/login";
HttpPost request = new HttpPost(url);
Log.v("meeeeeee", "开启子线程");
ArrayList<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
parameters.add(new BasicNameValuePair("username", name));
parameters.add(new BasicNameValuePair("pwd", pwd));
HttpEntity entity=new UrlEncodedFormEntity(parameters);
request.setEntity(entity);
Log.v("meeeeeee", "获取实例");
HttpResponse response = client.execute(request);
StatusLine statusLine = response.getStatusLine();
Log.v("meeeeeee", "获取实例"+statusLine.getStatusCode());
if(statusLine.getStatusCode()==200){
HttpEntity entity2 = response.getEntity();
InputStream is = entity2.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
// Toast.makeText(MainActivity.this, ""+reader.readLine(), 0).show();
Log.v("meeeeeee", reader.readLine());
}
} catch (Exception e) {
}
}
}.start();
}
/* 1.创建子线程
* 2.构建浏览器
* 3.创建get请求
* new httpget(urlpath);
* 4.读取响应
* 1.执行get请求 返回一个resp对象
* clien.execute(request);
* 2.获取响应行,
* resp.getStatusLine();
* 3.响应行获取响应码
* statusLine.getStatusCode();
* 5.获取返回的数据
* 1.
* */
void doGet(final String name ,final String pwd){
new Thread(){
public void run(){
Log.v("meeeeeee", "子线程开始");
try {
String urlPath = "http://192.168.35.180/login/login?username="
+ name + "&pwd=" + pwd;
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(urlPath);
HttpResponse response = client.execute(request);
Log.v("meeeeeee", "获取响应");
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode()==200){
Log.v("meeeeeee", "获取响应码");
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
// Toast.makeText(MainActivity.this, ""+reader.readLine(), 0).show();
Log.v("meeeeeee", reader.readLine());
}
} catch (Exception e) {
}
}
}.start();
}
Volley
/* 1.创建一个StringRequest对象
* 1.url
* 2.Listener
* 3.errorListener
* 404 500等时候会被调用
* 2.创建一个请求队列
* 3.执行一个网络请求
* */
public void volleyGet(View v){
String url = "http://f.xmg520.cn:82/LoginDemo/servlet/LoginToAction?passWord=123&userName=xiaomage&format=xml";
Listener<String> listener =new Listener<String>(){
@Override
public void onResponse(String response) {
Log.v("meeeeeee", ""+response);
}
};
ErrorListener errorListener = new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
};
StringRequest req = new StringRequest(url, listener, errorListener);
RequestQueue qq = Volley.newRequestQueue(this);
qq.add(req);
}
/*
* 1.创建一个StringRequest对象,并实现HashMap<String,String> getParame()
* 1.Method.post
* 2.创建一个url
* 3.Listener<T> `
* 4.ErrorListener<T> 2.创建一个RequestQueue对象
* 3.Rqq.add(req);
*/
public void volleyPost(View v) {
String url = "http://192.168.137.1/loginPost/login";
Listener<String> lis = new Listener<String>() {
@Override
public void onResponse(String response) {
Log.v("meeeeeee", response);
}
};
StringRequest req = new StringRequest(Method.POST, url, lis, null) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String, String> params = new HashMap<String, String>();
params.put("username", "lean");
params.put("pwd", "123456");
return params;
}
};
RequestQueue reqq = Volley.newRequestQueue(this);
reqq.add(req);
}
AsyTaskDemo
/* 需求:执行网络请求并修改UI
* 1.创建一个AsyncTask对象 ,并实现其在子线程中运行的方法
* AsyncTask<Void, Void, Void>
* 1.第一个参数是传进子线程中的形参,在子线程中是作为数组
* 2.在线程执行过程中返回进度的形参,是publishProgress()的参数类型
* 3.第三个参数是子线程返回的数据类型
* 线程暂停
* SystemClock.sleep(1000);
* 2.启动一个异步任务,在子线程运行
* asyncTask.execute("s");
* 3.实现onpostexecuta()在主线程中修改ui
* asyncTask.onPostExecute(String result){
* }
* 4.补充:
* 1.实现onpreexecute()用于初始化网络环境,该方法会在网络请求前调用
* 该方法在主线程中运行
* 2.onprogressupdate(T... values)
* */
public void start(View v){
AsyncTask<String, Integer, String> asyncTask = new AsyncTask<String, Integer, String>(){
@Override
protected String doInBackground(String... params) {
// 4.2
for(int i=0;i<100;i++){
SystemClock.sleep(50);
publishProgress(i);
}
return params[0];
}
@Override
protected void onPostExecute(String result) {
Toast.makeText(MainActivity.this,result , 0).show();
}
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
};
asyncTask.execute("你没的");
}