Android Thinkandroid学习之 http请求

来源:互联网 发布:如何进入it行业 知乎 编辑:程序博客网 时间:2024/06/01 21:10

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);    }}

源码下载点击打开链接

0 0
原创粉丝点击