安卓小项目之Everyday(2)---从网络获取数据之获取笑话数据

Android从onenet上获取数据 onenet平台上: 设备信息:主要是设备id和APIKey这两个参数 数据流信息: 其中一个数据流的名称:shumditity 最新一个数据: 参考:https://www.arduino.cn/thread-47375-1-2.html 所有数据流的最新一个数据: "http://api.heclouds.com/devices/36427574/datapoints... 阅读详情

上一篇实现了选项卡,接下来就是进入每个模块的编写了。因为一个模块可能牵扯的技术点太多,如果完成一个模块再写一次博客的话,这样篇幅可能过大,且技术点也不容易整理,所以我把一个模块分为几篇来讲解,由于这次只是从网络获取数据,所以开头就不放效果图了,我们只需要将获取的数据log.d出来在logcat中查看就行了

作为一个安卓前端,与后台进行交互的app接触的肯定也比较多,这次我们的数据来源于聚合数据这个网站,其中“笑话大全”这个接口是免费的,大家注册了就可以使用,但是只能免费会员只能申请使用一个免费接口。我们看看这个api给我们提供的接口是什么样的

这张图把这个api的请求参数和返回参数说的很明确,我们使用get去访问,然后网站会给我们返回一个json数据,我们只需要在程序里解析这个json,然后把需要的数据通过baseadpter与预先写好的布局相匹配就行了,不过今天我们只讲如何去获得这个json数据

实现思路:

1、因为是网络请求,所以肯定是不能在主线程中请求数据,这样很容易引起ANR(程序未响应),所以我们需要使用异步操作来请求数据,但是使用普通message的机制会让程序看起来没有秩序,日后也不容易理解和维护,所以我们还是将访问网络的操作封装在asynctask中

2、Everyday这个app有三个模块都需要用到网络,如果每个模块都创建一个asynctask,会使我们的工作量增大,而且更重要的是维护的时候如果要修改一个,其他的也要进行修改,所以,为了提高效率(偷懒?),我们就写一个asynctask模板,把我们需要传入的数据通过构造函数封装起来,这样我们在创建asynctask实例的时候就可以根据不同的需求来提交不同的数据了,是不是很高兴

3、既然获得了数据,那么肯定是要使用的,为了在创建asynctask实例的地方能够获取到数据,我们创建一个接口,如果创建asynctask实例的activity需要获得数据的话,那它只要实现这个接口就行了

asynctask代码:

package com.everyday.wei.everyday;

import android.os.AsyncTask;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * Created by wei on 2017/10/19.
 */
//使用AsyncTask来对网络请求进行封装
public class GetHttpData extends AsyncTask<String,Void,String> {
    private String URL;
    private TransmitHttpData transmitHttpData;
    GetHttpData(String URL,TransmitHttpData transmitHttpData)
    {
        //其他活动在调用此类时需要传递访问的网址
        this.URL=URL;
        this.transmitHttpData=transmitHttpData;
    }
    @Override
    protected String doInBackground(String... params) {
        try {
            //传递网址
            URL url=new URL(URL);
            try {
                //打开网络链接
                HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection();
                //以GET的方式访问网络
                httpURLConnection.setRequestMethod("GET");
                //设置最长等待时间为5秒
                httpURLConnection.setConnectTimeout(5000);
                //获得网络返回的代码
                int code=httpURLConnection.getResponseCode();
                //code == 200表示网络请求成功
                if (code==200)
                {
                    InputStream json = httpURLConnection.getInputStream();
                    //将网页返回的数据解析成字符串数据
                    BufferedReader reader=new BufferedReader(new InputStreamReader(json,"UTF-8"));
                    StringBuilder response=new StringBuilder();
                    String line;
                    while ((line=reader.readLine())!=null)
                    {
                        response.append(line);
                    }
                    return response.toString();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String s) {
        //将网络获得的数据通过接口传递给活动
        transmitHttpData.GetData(s);
    }
}
可以看到我们把接口作为GetHttpData的内部成员,并且在onPostExecute中把网络返回的数据传递给它

TransmitHttpData代码:

package com.everyday.wei.everyday;

/**
 * Created by wei on 2017/10/19.
 */

public interface TransmitHttpData {
    public void GetData(String data);
}
这个接口只有一个函数,就是得到请求返回的数据

接下来就是在我们需要的地方获取数据,在这里我们就在Mainacticity中获取,只是证明我们是不是真的能获取到数据,让Mainactivity实现这个接口

获取数据代码:

getHttpData= (GetHttpData) new GetHttpData("http://japi.juhe.cn/joke/content/text.from?key=60fbc4de5e9c94872a10268487583390&page=1&pagesize=5",this).execute();
}
@Override
public void GetData(String data) {
        Log.d("mainActivity","我获取到的数据是"+data);
}
效果图:


这个是我从log cat中copy到笔记本的,因为太长了,所以为了便于观看放在笔记本中截图,可以看到,我们确实在MainActivity中获取到了数据,而且返回的格式也的确是json格式

反思与总结:

1、我们创建asynctask时,其实可以其中一些数据设置为常量,也可以将这些在构造函数中让调用其的地方进行初始化,在这里为了简洁,我就只封装了地址和接口

2、今天的内容略少,就讲讲下一篇博客的预告:下一篇是对json数据进行解析,创建baseadapter来把我们需要的信息以列表的方式显示在joke这个fragment中去


简单介绍一下android studio中网络请求方法的步骤和环境搭建 1.httpUrlConnection内部,需要自己封装(在子线程或者线程池) 2.httpclient  appache  不推荐使用 2.2AsyncHttpClient框架  不推荐使用 3.volley框架 4.okhttp 开源框架 ,但是没有封装,使用的时候需要自己封装(在子线程或者线程池) 5.retrofit 对okHttp进行了非常好的封装 1.3.4 阅读详情

相关推荐

android获取聚合数据笑话

使用fastjson和xUtils框架来获取聚合笑话数据,请自己申请聚合笑话key放入就可以运行 使用android studio工具开发

笑话类android项目总结

android项目总结

□□□□ 1838

使用fastjson和xUtils框架来获取聚合笑话数据,请自己申请聚合笑话key放入就可以运行 使用android studio工具开发

使用fastjson和xUtils框架来获取聚合笑话数据,请自己申请聚合笑话key放入就可以运行 使用android studio工具开发 [注:本内容来自网络,在此分享仅为帮助有需要的网友,如果侵犯了您的权利,麻烦联系我,我会第一时间删除,谢谢您。]

Android小项目之笑话大全(附源码)

项目的界面采用了Material Design的设计风格,数据来自第三方API。 项目连接:点击打开链接,效果图请看里面的README.md 整个项目只使用了一个Activity,页面的切换是通过ViewPager+Fragment的方式完成的, 1、使用OkHttp进行网络请求 2、GSON解析JSON数据 3、recyclerview代替LsitView用于显示数据, 4、card

fuckluy的博客 4866

笑话大全(android)

pullloadmorerecyclerview+bottom-navigation-bar+glide 支持下拉刷新和上啦加载

一个小项目(笑话大全)

一个小项目,适合初学者.项目结构简单明了

安卓小项目之Everyday(3)--将笑话数据显示listview中

上一篇讲了如何从网络上获取到我们需要的数据,这次讲如何将这些数据显示出来。(聚合数据网站免费的数据一天只能访问100次,在开发时不断的调式界面,这点次数根本不够用,于是我开了个会员,好贵呀) 先放效果图   实现这个功能我们需要用到的东西有这些:1、一个用于承载数据的listview布局2、一个用于显示子项数据的布局3、实体类4、适配器5、将前者协调起来的activity 第一部分:lis

a_wei_shine的博客 659

Android项目源码笑话百科源码

本项目是一个基于安卓的笑话app客户端,数据来源http://www.jokeji.cn/。直接解析网页内容填充listview。如果网页挂了就不能查看效果了。所以想学习要尽快。项目里面有几个页面乱码,自己改一下编码。

接口如何使用(以笑话大全api为例)

接口如何使用(以笑话大全api为例) 一、总结 一句话总结:直接用ajax,或者post,get方式向接口网址请求数据,然后接收网站传过来的数据就好,和我们写网站的时候前台向后台请求数据的方式一样。 所以,比如想获取用户的地理位置,直接可以请求获取地理位置的接口网址。     二、接口如何使用(以笑话大全api为例) 接口地址:http://api.jisuapi.com/xiaohu...

weixin_33714884的博客 1956

最新Linux CSI Tools安装教程(两台主机,一发一收)(监控模式)

无线感知之CSI Tools工具安装,最新在监控模式下采集CSI数据,

h1998040218的博客 3033

AI视频生成本地搭建图文详细过程

在自己的电脑上搭建一个AI,主要用于通过自己输入的关键字来自动生成视频文案,把视频文案自动生成视频,再自动给视频配音配字幕。

张小三的博客 4693

android的MVC模式网络请求demo

此demo使用了 okhttputils---网络请求,butterknife---控件快捷,gson解析 主要文件如下图 MVC模式模式主要文件分别是MainActivity(M),布局文件(V),MvcListen、MvcModel、MvcModelImp(C),下面分别按编码顺序说明demo 1、MvcListen public interface MvcListe

Android小飞の博客 1311

PX4 EKF2协方差矩阵‘负定’了怎么办?保姆级排查与数值稳定性修复指南

本文深入解析PX4 EKF2协方差矩阵出现‘负定’问题的原因,并提供全面的排查与修复方案。从理论分析到实践操作,详细介绍了数值稳定性危机的诊断工具、算法加固措施及工程实践中的防御性编程技巧,帮助飞控工程师有效解决滤波算法中的数值稳定性问题。

weixin_28730927的博客 319

[Android 知识点] 网络请求框架Retrofit使用

介绍Retrofit

命运多舛,还望天佑 520

基于java实现的弹幕视频网站

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示弹幕视频网站,在弹幕视频网站可以查看首页、视频信息、商品信息、论坛信息、我的、跳转到后台、购物车、客服等内容前台首页界面图登录,通过登录填写账号、密码等信息进行登录操作登录界面图视频信息界面图。

DC5621的博客 1333

surfer10与Arcgis10.3 完美生成等值线和等值面方法

surfer10 与Arcgis10.3生成等值线和等值面的步骤如下: 1.准备surfer用的Book1.dat文件,格式如下: "x" "y" "z" 116.471992 40.809975 232 116.335556 40.700542 1235 116.541626 40.713333 214 116.73349 40.798607 566 2.在surfer中,选择Gr

哈里·雪利博客 1万+

(转)微信小程序开发项目——笑话大全

此项目是学习完微信小程序后实现的一个demo,采用聚合数据的免费api获取最新的文本笑话和趣图(图片和gif图) 项目地址:https://github.com/zhijieeeeee/wechat-app-joke 转载于:https://www.cnblogs.com/annie00/p/6085156.html...

diaoyingqian3114的博客 551

华为EC6108V9E刷机实战:从U盘准备到开机优化的完整避坑指南

本文提供华为悦盒EC6108V9E刷机与优化的完整实战指南。针对搭载RK3228芯片和安卓4.4.4系统的设备,从型号确认、固件选择、U盘准备,到详细刷机步骤、常见故障排除,以及刷机后的深度性能优化,手把手帮助用户规避风险,让旧盒子焕发新生,成为流畅的全能媒体中心。

weixin_29324401的博客 1191

树上10只鸟,开枪打死1只,还剩几只?

记得在幼儿园里面听过这个问题,俺笨笨的回答“还有9只”,结果答错!今天在 QQ 群里面看到一特符合今年的生肖的回答版本,贴上来大家一起笑笑!另注,出处不明!树上有十只鸟,开枪打死一只,还剩几只?某日,老师在课堂上想考考学生们的智商,就问一个男孩: “树上有十只鸟,开枪打死一只,还剩几只?”男孩反问:“是无声手枪,还是其他没有声音的枪么?”“不是.”“枪声有多大?”“80~100分贝.”“那就是说会

能力改变命运,心态决定一切! 3112

基于STM32单片机设计的智能水温控制系统

本项目研究并实现了一种基于STM32单片机的智能水温控制系统。系统以STM32F103RCT6作为主控制器,通过DS18B20温度传感器实时采集水温数据,利用PID控制算法精确调节5V直流防水型70W加热棒的功率输出,确保水温恒定在设定范围内。此外,采用OLED显示屏显示当前水温和预设上限阀值,并集成ESP8266-WiFi模块与自研Android手机APP进行远程通信和控制。用户可通过本地按键或手机APP设置温度阀值,实现实时监控与智能化管理。整个系统设计旨在提高水资源利用效率,提升生活及工业用水环境的舒

8790

openGauss学习笔记-280 openGauss性能调优-实际调优案例09-修改启动参数解决TPCC大幅度波动

openGauss学习笔记-280 openGauss性能调优-实际调优案例09-修改启动参数解决TPCC大幅度波动280.1 现象描述280.2 优化分析 openGauss学习笔记-280 ope

超哥的博客 309

Android 通过接口传值(以网络请求为例)

第一步,定义接口类: public interface MCallBack { /** * 处理返回的code list */ String handleCodes(String dataStr); /** * 请求失败处理 */ void errorResponse(); } 第二步,在公共类中定义回传方法: public static void sendRe

阳光心态的博客 1011

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

安卓开发之使用第三方的聚合数据API,QQ测吉凶案、身份证号码查询。

在安卓开发中,肯定需要很多API接口, 比如天气获、快递实时信息、身份证号码查询和基本的短信验证码。API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。效果图聚合数据介绍 聚合数据是一家国内最大的基础数据API提供

徐宏的博客 | 修身齐家治国平天下 4137

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

安卓仿手机网易新闻app项目开发系列之(三)数据抓取和解析 上

一.项目简介和思路     上节我们实现了在网上请求静态图片显示在手机上,这节我们来实现在网上找一个新闻网页来抓取其中的数据然后显示在手机上。 二.项目流程 1.获取网页数据  现在我们要获取网页新闻数据在手机上显示,那么网络数据怎么获取呢?在这里先给大家讲先获取网络数据的工具。主要是用到了火狐浏览器下的插件 firebug和httprequest。firebug可以查看网页的些源

hongaer24的博客 3007

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

笑话大全API 实战项目 开心一笑app

这是一款以 MVP 架构开发的练习项目,使用了 retorfit2,okhttp3,glide,jackson,rxjava,photoview 等热门框架, 数据来自聚合数据。 截图展示 图片来源 https://pixabay.com/zh/ 数据来源 https://www.juhe.cn/docs/api/id/95 google play store ...

ishxiao的博客 1688
上一篇: 安卓小项目之Everyday(1)---使用fragment实现选项卡
下一篇: 安卓小项目之Everyday(3)--将笑话数据显示listview中
CV勇士
博客等级 码龄10年 2粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值