当前位置: 首页 > 科技观察

AndroidAPI最佳实践与学习

时间:2023-03-13 23:59:46 科技观察

如今,在Android应用程序中集成第三方API非常流行。应用程序有自己的网络操作和缓存处理机制,但它们中的大多数都很脆弱,并且没有针对恶劣的网络条件进行优化。感谢Squarelnc,这是一家将信用卡商务交易带到手机上的创新公司。现在有一系列高质量的开源库支持在Android应用程序中集成。做什么和怎么做?现在,我们将学习使用Retrofit、OKHttp和GSON,以便轻松快速地集成RESTAPI。使用这种组合,我们需要从Twitch.tv下载并解析一些数据。按照以下步骤在几分钟内完成大多数RESTAPI集成,而无需编写繁琐的样板代码。学习RetrofitRetrofit简化了从WebAPI下载数据,并将其解析为普通的旧Java对象(POJO)。比如从GitHub下载用户仓库信息,只需要写下面几行:@GET("/users/{user}/repos")ListlistRepos(@Path("user")Stringuser);此外,您还需要创建Repository信息类和数据类型。这些代码也可以自动生成,下面将介绍如何生成。整个过程非常简单,类似于发送带参数的请求或者发送POST或者HEAD。不同类型的API如何连接,请参考文档。Retrofit的一个特性使得向请求和响应添加处理逻辑成为可能。可以在http请求头中添加数据,也可以拦截认证失败的响应重定向到登录界面。OKHttpOKHttp是Android版本的Http客户端。非常高效,支持SPDY、连接池、GZIP和HTTP缓存。默认情况下,OKHttp会自动处理常见的网络问题,例如二次连接和SSL握手问题。如果你的应用中集成了OKHttp,Retrofit会默认使用OKHttp来处理其他网络层请求。GSONGSON是一个将JSON解析为POJO的Java库。GSON还可以将POJO解析为JSON。在Android中,将数据对象存储在SharePreference中更为方便。使用GSON首先需要创建对应的POJO数据,然后使用GSON将其解析为POJO对象。解析过程简单高效。要了解如何创建可被GSON解析的POJO对象,请参阅文档。Retrofit使用GSON来解析JSON数据。开始Coding,在项目中添加库文件下载Retrofit、OKHttp、GSON库文件。将jar文件一个一个地添加到您的项目中。如果你使用AndroidStudio,你可以使用gradle来同步这个项目。查找或编写API您可能已经有了API,但如果您仍在寻找API目录,我推荐ProgrammableWeb。在本教程中,我们将分析Twitch.Tv流。请求格式请参考使用说明书。Twicht.tv请求数据流的JSON格式:http://api.justin.tv/api/stream/list.json显示了输出并显示了API返回的一些数据。下面的例子是GET请求,只能在浏览器中浏览运行,返回数据如下:[{"broadcast_part":4,"featured":true,"channel_subscription":true,"audio_codec":"uncompressed","id":"6640712464","category":"游戏","title":"FnaticxPeke,Normals(rankeddown)onsmurf","geo":"DE","video_height":1080,"site_count":8014,“embed_enabled”:true,“channel”:{“subcategory”:null,“producer”:true,“image_url_huge”:“http://static-cdn.jtvnw.net/jtv_user_pictures/xpeke-profile_image-a182a5fe5a8f239b-600x600.jpeg","timezone":"Europe/Madrid","screen_cap_url_huge":"http://static创建POJO这部分很有意思,利用我们拿到的数据自动创建对应的POJO。使用jsonschema2pojo,导入包name,classname和json数据,并保存为私有类型,示例中的结构不能使用操作符,因为json数据的根元素是数组,不是对象。所以我只发布了数组的第一个元素。显示相关图像示例。集成POJO只需将自动生成的POJO粘贴到项目中即可。在我的示例项目中,它们位于模型包中。使用Retrofit下载(解析)API创建RESTAdapter创建Adapter,类似于设置endPoint。RestAdapterrestAdapter=newRestAdapter.Builder().setEndpoint("http://api.justin.tv/api").build();定义API接口,为需要连接的endPoint定义接口。在下面的示例中,limit和offset用于控制请求数据的位置和大小。有关详细信息,请参阅API文档。publicinterfaceTwitchTvApiInterface{@GET("/stream/list.json")voidgetStreams(@Query("limit")intlimit,@Query("offset")intoffset,Callbackcallback);}你可能注意到我们期望的是什么返回的是一组JustinTvStreamData对象,也就是我们刚才自动生成的POJO。有关如何定义此接口的更多信息,请参阅Retrofit文档。创建Twitch.tv服务现在我们已经建立了端点,我们已经定义了所需的接口。接下来,您需要创建Twitch.TV服务并发送请求。TwitchTvApiInterfacetwitchTvService=restAdapter.create(TwitchTvApiInterface.class)使用API??发送API请求非常简单,只需要使用刚刚创建的服务即可。twitchTvService.getStreams(ITEMS_PER_PAGE,pageNumber*ITEMS_PER_PAGE,newCallback(){@Overridepublicvoidsuccess(ListjustinTvStreamData,Responseresponse){consumeApiData(justinTvStreamData);}@Overridepublicvoidfailure(RetrofitErrorretrofitError){consumeApiData(null);}});这里要一点请注意,Retrofit将在后台线程中下载和解析API数据,并根据结果(成功或失败)将其发送到UI线程。Retrofit还支持后台自动下载(此处未显示)。有趣的数据操作现在让我们用POJO数据做一些有趣的事情。在这个demo中,展示了Twitch.Tv频道的图片和描述,使用PicassoLibrary下载缓存的图片。参考代码示例代码下载。