Android Thinkandroid学习之 http请求

简介: 版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/u013132758。 https://blog.csdn.net/u013132758/article/details/49491561 ...
版权声明:本文为博主原创文章,转载请注明出处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);
    }
}


源码下载点击打开链接
相关文章
|
3月前
|
存储 安全 Android开发
"解锁Android权限迷宫:一场惊心动魄的动态权限请求之旅,让你的应用从平凡跃升至用户心尖的宠儿!"
【8月更文挑战第13天】随着Android系统的更新,权限管理变得至关重要。尤其从Android 6.0起,引入了动态权限请求,增强了用户隐私保护并要求开发者实现更精细的权限控制。本文采用问答形式,深入探讨动态权限请求机制与最佳实践,并提供示例代码。首先解释了动态权限的概念及其重要性;接着详述实现步骤:定义、检查、请求权限及处理结果;最后总结了六大最佳实践,包括适时请求、解释原因、提供替代方案、妥善处理拒绝情况、适应权限变更及兼容旧版系统,帮助开发者打造安全易用的应用。
73 0
|
4天前
|
安全 API 网络安全
使用OkHttp进行HTTPS请求的Kotlin实现
使用OkHttp进行HTTPS请求的Kotlin实现
|
1月前
|
Java Maven Kotlin
vertx的学习总结7之用kotlin 与vertx搞一个简单的http
本文介绍了如何使用Kotlin和Vert.x创建一个简单的HTTP服务器,包括设置路由、处理GET和POST请求,以及如何使用HTML表单发送数据。
33 2
vertx的学习总结7之用kotlin 与vertx搞一个简单的http
|
2月前
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
第一个安卓项目 | 中国象棋demo学习
|
1月前
|
Web App开发 编解码 视频直播
视频直播技术干货(十二):从入门到放弃,快速学习Android端直播技术
本文详细介绍了Android端直播技术的全貌,涵盖了从实时音视频采集、编码、传输到解码与播放的各个环节。文章还探讨了直播中音视频同步、编解码器选择、传输协议以及直播延迟优化等关键问题。希望本文能为你提供有关Andriod端直播技术的深入理解和实践指导。
44 0
|
2月前
|
存储 API Android开发
"解锁Android权限迷宫:一场惊心动魄的动态权限请求之旅,让你的应用从平凡跃升至用户心尖的宠儿!"
随着Android系统的更新,权限管理成为应用开发的关键。尤其在Android 6.0(API 级别 23)后,动态权限请求机制的引入提升了用户隐私保护,要求开发者进行更精细的权限管理。
65 2
|
1月前
|
安全 网络安全 数据安全/隐私保护
HTTPS 请求中的证书验证详解(Python版)
HTTPS 请求中的证书验证详解(Python版)
103 0
|
2月前
|
Android开发
Android学习 —— 测试init.rc中的条件触发的处理顺序
Android学习 —— 测试init.rc中的条件触发的处理顺序
|
3月前
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
236 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
|
3月前
|
XML 安全 Android开发
Flutter配置Android和IOS允许http访问
Flutter配置Android和IOS允许http访问
117 3