`
yonglin4605
  • 浏览: 188479 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

android基于http通信的库

 
阅读更多
完整文档参见:https://github.com/xuhengfei/slovef-sdk

slovef-sdk
==========
Android客户端与后台服务通过http协议进行交互时,使用slovef-sdk可以使得编程更加简单

客户端与服务端,一个http请求,我们就认为是一个API

* 发起http请求
* 实现http登陆失效后的自动登陆
* 实现http请求的模拟返回
* 图片下载与缓存

##如何发起一个API请求
创建一个自定义Api类,继承ConnectApi
```java
    /**
* 此API用于查询当前是否已经登陆
* 预期返回的结果是json格式
* 成功: {login:true}
* 失败: {login:false}
*/
public class IsLoginApi implements ConnectApi<Boolean>{
public HttpUriRequest getHttpRequest() {
//Http请求基于HttpClient,因此需要拼装一个HttpUriRequest
HttpUriRequest req=new HttpGet("http://xxx.com/islogin.do");
return req;
}
public ResponseParser<Boolean> getResponseParser() {
return new JsonParser<Boolean>() {
public Boolean parse(JSONObject json) throws Exception {
return json.optBoolean("login");
}
};
}
}

```
发起Http请求,并获取结果
```java
    HttpMgr httpMgr=new HttpMgr();
IsLoginApi api=new IsLoginApi();
Boolean isLogin=httpMgr.execute(api);
System.out.println(isLogin);
```


##实现http登陆失效后的自动登陆
使用http协议与服务端交互,一般都需要登陆。

登陆信息在经过一段时间后,可能会过期失效,如果此时再发起需要登陆验证的请求,就会失败了

我们需要实现,当session失效时,自动进行一次登陆行为,登陆成功后再对之前的请求进行重试

这里我们通过自己实现一个HttpMgr里面的FailStrategy来完成自己的一个请求失败处理策略

```java
    class MyAutoLoginStrategy extends AutoLoginStrategy{
public boolean isLogin(HttpResponse resp) {
//根据相应结果判定,是否已登陆
return false;
}

@Override
public boolean doLogin(HttpMgr httpMgr) {
try {
return httpMgr.executeOnce(new LoginApi("zhangsan", "12345"));
} catch (Exception e) {
e.printStackTrace();
}
return false;
}

}
```
以上代码继承了AutoLoginStrategy,AutoLoginStrategy中已经实现了自动重试等功能,具体参见源码

在此处,只需要写清楚如何发起登陆请求即可

##实现http请求的模拟返回
客户端和后台一般都是同时进行开发的

当服务器端还没有提供好Api接口,而客户端需要使用时,就需要对服务器端的Api进行模拟

slovef-sdk提供非常方便的http请求模拟框架

* 创建一个需要模拟返回的Api,将此Api类实现HttpMockable接口
* 实现HttpMockable的mock()方法,此方法返回你想返回的格式
* 在创建HttpMgr时,设置httpMgr.setEnableMock(true)

```java
    class MockLoginApi implements ConnectApi<Boolean>,HttpMockable<Boolean>{
public Boolean mock() {
return true;//模拟返回true,表示登陆成功
}
public HttpUriRequest getHttpRequest() {
return null;
}
public ResponseParser<Boolean> getResponseParser() {
return null;
}
}
```

##图片下载与缓存

slovef-sdk自带了图片下载的Api:ImageLoadApi

默认此Api会自动将图片缓存到本地

当然也可以指定不缓存图片:new ImageLoadApi("http://xxx.com/abc.jpg",false)

有了这个Api,使用httpMgr.execute(api)就可以得到Bitmap对象了

因为本地缓存需要指定一个目录,因此在启动时,需要执行 FileCache.init(cache-folder)

除了图片缓存,其他http请求也可以进行缓存

只要将自己的Api实现HttpCacheable接口,即可。


分享到:
评论

相关推荐

    android的Http通信

    在Android开发中,进行HTTP通信是常见的操作,用于与服务器交换数据。HTTP(超文本传输协议)是一种基于TCP/IP通信协议来交换数据的应用层协议,广泛应用于网页浏览、API交互等场景。本教程将深入讲解如何在Android...

    Android串口通信(Android Studio)

    - **选择库**:选择合适的串口通信库,如Android-SerialPort-API,将其导入到项目中。在Android Studio中,可以通过Gradle依赖来引入。 - **连接串口**:找到设备上的可用串口,通常通过`/dev/ttyACM*`或`/dev/...

    Android基于Netty框架实现通信

    在Android开发中,为了实现高效的网络通信,开发者常常会选择使用Netty框架。Netty是一个高性能、异步事件驱动的网络应用程序框架,适用于多种协议的服务器和客户端应用。本篇文章将详细探讨如何在Android环境中利用...

    Android 串口通信库源码

    **Android 串口通信库源码详解** 在Android开发中,串口通信是连接外部硬件设备,如传感器、Arduino等微控制器,进行数据交互的重要手段。Android 串口通信库源码提供了一套完整的解决方案,涵盖了原生层(C/C++)...

    基于Java实现的Android蓝牙串口通信库设计源码

    该项目是一款基于Java的Android蓝牙串口通信库,专为开发者提供便捷的蓝牙与微控制器通信解决方案。该库包含93个文件,涵盖34个XML配置文件、12个Java源代码文件、14个PNG图片文件、8个二进制文件、5个属性文件、5个...

    基于android平台的通信系统设计与实现

    对于HTTP/HTTPS通信,我们可以利用Android的HttpURLConnection或者第三方库如OkHttp来实现。WebSocket则为实时通信提供了双向全双工通道,常用于即时消息应用。 其次,考虑到Android系统的多线程机制,通信操作通常...

    Android UDP通信库下载

    在Android开发中,UDP通信库是一种重要的工具,尤其适用于数据量小但传输频率高的场景,如实时游戏、物联网设备通信等。"Android UDP通信库下载" 提供的库可能就是一个优化过的非阻塞I/O(Non-blocking I/O,NIO)...

    android与C# WebService基于ksoap通信

    总结,Android与C# WebService基于kSOAP通信的核心在于正确构造SOAP请求,设置HTTP头信息,调用Web Service方法,发送请求并处理响应。这个过程中需要注意兼容性问题,特别是当Android客户端与.NET Web Service交互...

    基于openfire的android即时通信

    本项目以"基于openfire的android即时通信"为主题,构建了一个利用XML协议的Android客户端,服务器端采用的是开源的openfire服务器。 Openfire服务器详解 Openfire是一款基于Java开发的即时通信服务器,它支持XMPP...

    基于android的点对点PP通信—文献综述.pdf

    【Android点对点(P2P)通信概述】 随着科技的快速发展,尤其是网络技术和移动设备的不断提升,点对点(Peer-to-Peer, P2P)通信作为一种新兴的通信方式,开始在Android平台上得到广泛应用。Android是由Google推出的一...

    android与服务器通信

    综上所述,Android与服务器通信涉及多个层面,包括选择合适的通信协议、库,实现登录功能,以及处理网络异常和安全性问题。开发者需要根据项目需求,灵活运用这些知识,构建高效、安全的应用。描述中的源代码示例...

    Android-netty和socket通信的demo

    在Android开发中,网络通信是不可或缺的一部分,而Netty是一个高效、强大的网络应用程序框架,它为构建高性能、稳定的网络服务器提供了便利。本示例“Android-netty和socket通信的demo”将展示如何在Android平台上...

    Android 串口通信权限问题

    4. **第三方库**:为了简化串口通信,可以使用第三方库,如`Android-SerialPort-API`或`JavaComm-for-Android`。这些库通常提供了更友好的API来处理权限问题,但依然需要确保在manifest文件中声明它们所需的权限。 ...

    Android中Http通信

    二、Android中的Http通信库 1. **HttpURLConnection**:Android原生提供的API,基于Java的URLConnection。优点是低资源消耗,支持HTTP/2和SSL/TLS。缺点是使用相对复杂,需要手动处理连接、输入输出流等。 2. **...

    Android中基于protobuf的socket通信的实例

    本实例将深入探讨如何在Android应用中使用protobuf进行基于socket的通信。 首先,理解protobuf的基本原理是至关重要的。protobuf通过定义.proto文件来描述数据结构,然后使用protoc编译器生成对应语言的类文件。在...

    android HTTP通信例子(json数据传递)

    本示例将重点讲解如何在Android应用中实现基于HTTP的JSON数据传递,以及如何处理文件的上传和下载。 首先,我们要了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也...

    基于Android的C语言题库管理系统

    2. 数据交互:通过HTTP/HTTPS协议与服务端API进行通信,实现同步或异步请求,如使用Retrofit或OkHttp库进行网络请求。 3. 数据缓存:为了提高用户体验,客户端可以将常用数据进行本地缓存,比如使用SQLite数据库存储...

    android同linux底层通信机制实现

    Android系统基于Linux内核,因此可以利用Linux丰富的驱动模型。Linux内核提供了多种设备驱动模型,如字符设备驱动、块设备驱动和网络设备驱动等,开发者可以根据硬件特性选择合适的模型编写驱动程序。驱动程序通常会...

    基于Android的socket通信

    在网络通信中,Socket是基于TCP/IP协议栈的,可以实现TCP连接,确保数据的可靠传输。 在Android客户端(Android App)中,通常我们会使用`java.net.Socket`类来创建Socket对象,通过它来建立到服务器的连接,并进行...

Global site tag (gtag.js) - Google Analytics