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


源码下载点击打开链接
相关文章
|
15天前
|
Java
java原生发送http请求
java原生发送http请求
|
23天前
|
网络协议 Linux iOS开发
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
51 1
|
1月前
|
编解码 测试技术 索引
性能工具之 Jmeter 使用 HTTP 请求编写 HLS 脚本
在我们简要介绍了 HLS 协议的基础知识,接下来我们详细介绍一种使用 Jmeter 编写压测 HLS 协议脚本的方法。
72 1
性能工具之 Jmeter 使用 HTTP 请求编写 HLS 脚本
|
5天前
|
安全 Java 网络安全
Servlet 教程 之 Servlet 客户端 HTTP 请求 2
Servlet教程介绍了如何在Servlet中处理HTTP请求,包括获取Cookie、头信息、参数、Session等。方法如:`getCookies()`、`getAttributeNames()`、`getHeaderNames()`、`getParameterNames()`等。还能获取身份验证类型、字符编码、MIME类型、请求方法、远程用户信息、URL路径、安全通道状态以及请求内容长度等。此外,可通过`getSession()`创建或获取Session,并以`Map`形式获取参数。
20 8
|
1天前
|
JSON 测试技术 API
Python的Api自动化测试使用HTTP客户端库发送请求
【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
7 3
|
2天前
|
网络协议 Shell Android开发
Android 深入学习ADB调试原理(1)
Android 深入学习ADB调试原理(1)
17 1
|
8天前
|
安全 网络安全 开发工具
对象存储oss使用问题之flutter使用http库进行post请求文件上传返回400如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
24 1
|
9天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
9 0
|
11天前
|
安全 Android开发 数据安全/隐私保护
Android中的动态权限请求与最佳实践
【4月更文挑战第14天】 在现代安卓应用开发中,用户隐私和安全被赋予了前所未有的重要性。随着Android 6.0(API级别23)引入的运行时权限模型,开发者必须更加细致地处理权限请求,以确保应用功能的完整性同时不侵犯用户的隐私。本文将深入探讨如何在Android应用中实现动态权限请求,分析常见问题,并提供一系列最佳实践,以帮助开发者优雅地处理这一挑战。
21 5
|
27天前
解决Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com
解决Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com
22 5