加入收藏 | 设为首页 | 会员中心 | 我要投稿 航空爱好网 (https://www.52kongjun.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 移动互联 > 应用 > 正文

app应用 Android Studio打造一个小说阅读App

发布时间:2022-11-19 15:30:28 所属栏目:应用 来源:互联网
导读: 原因
方法
接口类:
@GET("/ranking/gender")
Call getAllRanking();

OkHttpClient build = new OkHttpClient.Builder()
.connectTimeout(2, TimeUnit.SECONDS)
.readTim

原因

方法

接口类:

@GET("/ranking/gender")
Call<AllRankingObj> getAllRanking();

OkHttpClient build = new OkHttpClient.Builder()
        .connectTimeout(2, TimeUnit.SECONDS)
        .readTimeout(2, TimeUnit.SECONDS)
        .writeTimeout(2, TimeUnit.SECONDS)
        .build();
// 用于API访问
Retrofit retrofitForApi = new Retrofit.Builder()
        .baseUrl(ApiUrl)
        // 设置json数据解析器
        .addConverterFactory(GsonConverterFactory.create())
        // RxJava封装OkHttp的Call函数,本质还是利用OkHttp请求数据
        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
        .client(build)
        .build();

4.设置同步变量控制线程顺序

原因

当输入速度特别快时,有的线程清空了list,而有的线程正在调用list里的元素,这样会发生访问异常,需要设置同步变量使得同一时刻只有一个线程在运行。

方法

flag = true; //用于同步问题的布尔变量
if (!s.equals("") && flag) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            flag = false;
            ...
        }
    }
}

5.将多个列表放在一个activity下

原因

将不同列表放入多个activity里可以使得界面布局简单,但是带来的问题是需要增加许多activity之间的通信app应用,增加了跳转的复杂度,而将列表放入同一个activity里方便跳转时的信息传递。

方法

//设置可见
if (!isSubmit) {
    if (s.equals("")) {
        initialLayout.setVisibility(View.VISIBLE);
        searchLayout.setVisibility(View.GONE);
    }
    else {
        initialLayout.setVisibility(View.GONE);
        searchLayout.setVisibility(View.VISIBLE);
        fuzzyList.setVisibility(View.VISIBLE);
        resultList.setVisibility(View.GONE);
    }
}

6.系统广播获取系统电量和时间

原因

用户进入阅读界面时是全屏阅读,顶部状态栏会消失,那么需要有个信息栏来简要显示系统电量和时间

方法

onCreate 中注册广播,接受电量和时钟变化,并创建自定义的广播接收者MyReceiver类来处理订阅

//注册广播接受者java代码
intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);    // 电量变化广播
intentFilter.addAction(ACTION_TIME_TICK);
//创建广播接受者对象
myReceiver = new MyReceiver();
//注册receiver
registerReceiver(myReceiver, intentFilter);

自定义广播接收者类,处理电量和时钟变化广播

class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())){
            //获取当前电量
            int level = intent.getIntExtra("level", 0);
            //电量的总刻度
            int scale = intent.getIntExtra("scale", 100);
            //把它转成百分比
            int percent = level*100/scale;
            // TODO: Do Something when battery_changed
        }
        else if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) {
            // TODO:Do Something when time_tick
        }
    }
}

onDestroy 中注销广播订阅

unregisterReceiver(myReceiver);

7.非注销生命周期的横竖屏切换

原因

小说阅读需要适应用户阅读习惯,有时候用户需要横屏阅读,因此需要实现阅读界面横竖屏模式切换如果不设置上面第1步的代码,那么横竖屏切换会重新注销Activity,即结束当前活动的生命周期并重新开启一个新的声明周期。这样不仅需要时间重新进行网络访问获取小说章节内容,而且会影响到用户的使用体验。

方法

在AndroidManifest.xml 中对Activity 设置属性(关键)

android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"

横竖屏切换后台java代码

切换到横屏

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

切换到竖屏

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

五、应用部署

下载好源代码之后,通过android studio部署到手机或模拟器即可,或直接安装report目录下的apk文件。对android studio版本没有具体要求。

在这里插入图片描述

注:应用开发测试环境的sdk版本最低为22,最高为28

六、运行截图

1、运行项目,进入主界面,显示的是本地书架,此时我们已经添加了四本书籍。

在这里插入图片描述

2、第三本看完了,我们长按将它删除。

在这里插入图片描述

3、点击右上角图标,进入搜索界面,输入作者或者书名查找,底下是大家都在搜的关键词,可以刷新。还有搜索历史,可以删除。

在这里插入图片描述

4、进入排行榜,可以选择性别,然后查看各排行,比如最热榜、完结榜。

在这里插入图片描述

在这里插入图片描述

5、进入具体的榜单后,顶部导航栏还分为周榜、月榜和总榜。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6、点击任意书籍,进入详情界面,有阅读人次、留存率、简介和同类推荐等。

在这里插入图片描述

7、选择加入书架,就将书籍放到了书架中。选择免费阅读,api当前没有该书的版权,推荐我们直接下载软件看小说。

在这里插入图片描述

8、别着急退出,点击屏幕中央,弹出底部功能菜单,可以设置日夜模式、很竖屏切换和字体大小。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

9、进入分类导航栏,这里有几百万本书籍,真的看不过来了。

在这里插入图片描述

10、点进任意分类,会进入具体分类界面,显示顶部导航栏和书籍列表。

在这里插入图片描述

在这里插入图片描述

11、回到书架导航栏,可以看到刚刚添加进来的所有书籍。

在这里插入图片描述

这有你错过的精彩内容

(编辑:航空爱好网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!