版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/u013132758。 https://blog.csdn.net/u013132758/article/details/49491561
Android Thinkandroid学习之 http请求
1、http请求同步和异步的区别
同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。
异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。
所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。
两者请求过程的主要区别在于:
同步是用主线程去访问;
异步是用子线程去访问,主线程继续工作 若是的同步的话会卡死ui界面,所以在Android4.1以后不允许使用同步请求了。
请求方式,分为GET与POST:
GET
最为常见的HTTP请求,普通上网浏览页面就是GET。
POST
向服务器提交数据用到。
2、源码
这样的http请求现在有好多简单、便捷的框架,被托管在Github上了。这些框架中都有封装好的http请求函数,用起来非常简单。小编这里用了ThinkAndroid这个开源框架,下面是一个简单的Demo,我们用不同的请求方式同时请求百度首页,将请求的结果显示在WebView中。
package com.example.leiqi.thinkandroid_demo;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.Toast;
import com.ta.TASyncHttpClient;
import com.ta.annotation.TAInject;
import com.ta.annotation.TAInjectView;
import com.ta.util.http.AsyncHttpClient;
import com.ta.util.http.AsyncHttpResponseHandler;
import com.ta.util.http.RequestParams;
public class MainActivity extends BaseActivity {
@TAInjectView(id = R.id.button)
Button TbGET;
@TAInjectView(id = R.id.button2)
Button ybGET;
@TAInjectView(id = R.id.button3)
Button ybPOST;
@TAInjectView(id = R.id.button4)
Button tbPOST;
@TAInjectView(id = R.id.button5)
Button Clear;
@TAInjectView(id = R.id.webView)
WebView show_return;
@TAInject
private TASyncHttpClient syncHttpClient1;
@TAInject
private AsyncHttpClient asyncHttpClient;
private static final String Baidu = "http://www.baidu.com";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("wefwe","rewre");
switch (v.getId()) {
case R.id.button:
sysGet();
break;
case R.id.button2:
asyn1GET();
break;
case R.id.button3:
asynPost();
break;
case R.id.button4:
synPost();
break;
case R.id.button5:
showWebView("");
break;
}
}
};
TbGET.setOnClickListener(onClickListener);
ybGET.setOnClickListener(onClickListener);
tbPOST.setOnClickListener(onClickListener);
ybPOST.setOnClickListener(onClickListener);
Clear.setOnClickListener(onClickListener);
}
/**
* GET同步请求
*/
private void sysGet() {
String content = syncHttpClient1.get(Baidu);
showWebView(content);
}
/**
* GET异步请求
*/
private void asyn1GET()
{
asyncHttpClient.get(Baidu, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String content) {
super.onSuccess(content);
showWebView(content);
}
});
}
/**
* Post同步请求
*/
private void synPost()
{
RequestParams params = new RequestParams();
params.put("user_name","Terry");
params.put("password", "13071214");
Toast.makeText(MainActivity.this,"本测试参数并未真正的传送,大家根据需要写参数",Toast.LENGTH_SHORT).show();
String content = syncHttpClient1.post("http://www.baidu.com");
showWebView(content);
}
/**
* Post异步请求
*/
private void asynPost()
{
RequestParams params = new RequestParams();
params.put("user_name", "Terry");
params.put("password", "13071214");
Toast.makeText(MainActivity.this,"本测试参数并未真正的传送,大家根据需要写参数",Toast.LENGTH_SHORT).show();
asyncHttpClient.post(Baidu, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String content) {
super.onSuccess(content);
showWebView(content);
}
});
}
/**
* 在webview 中展示请求结果
*/
private void showWebView(String content) {
show_return.getSettings().setDefaultTextEncodingName("utf-8");
show_return.loadDataWithBaseURL(null, content, "text/html", "utf-8",
null);
}
}
源码下载点击打开链接