你的位置:
首页
>
业界
>
安卓应用引导界面设计与极光推送集成教程
本文还有配套的精品资源,点击获取
简介:本项目主要教授如何在安卓应用中实现项目引导界面和集成极光推送服务。引导界面设计涉及滑动页面、图片展示和动画效果,以提升用户体验。集成极光推送则包括注册开发者账号、添加SDK依赖、初始化服务、消息处理以及解决组件缺失等问题,以便开发者能够顺利地将推送功能整合到应用中。
1. 应用启动引导页设计与实现
随着移动互联网的发展,应用的用户界面(User Interface, UI)和用户体验(User Experience, UX)越来越受到重视。一个好的应用启动引导页可以给用户留下深刻的第一印象,引导用户快速了解应用的主要功能和操作方式。本章将探讨启动引导页的设计理念、实现方法和优化技巧。
1.1 引导页设计原则
启动引导页的主要目的是引导新用户熟悉应用,为他们提供一个直观、易懂的入门体验。设计原则应遵循简洁、直观、高效三大要点。
简洁性 :避免在引导页上放置过多的文字或复杂的背景,以免分散用户的注意力。 直观性 :使用直观的图像或动画来展示应用的核心功能和操作流程。 高效性 :确保引导流程简短明了,避免过多的步骤,以免造成用户的疲劳感。
1.2 实现引导页的技术方案
实现引导页的技术方案可以分为前端展示和后端存储两大部分。前端主要负责图像和动画的展示,后端负责记录用户是否已看过引导页。
前端展示 :可以使用Android中的Activity或者iOS中的UIViewController配合动画库来实现。 后端存储 :利用SharedPreferences或者轻量级数据库来记录用户对引导页的查看状态。
1.3 引导页的优化技巧
为了提升用户体验,我们可以在引导页中加入一些优化技巧,如:
动态引导内容 :根据用户的操作历史,动态调整引导内容。 智能跳过机制 :检测用户是否已经熟悉应用,如果用户对操作流程比较熟悉,可以提供跳过引导页的选项。 后台预加载资源 :在启动应用时,后台预加载引导页所需的资源,以减少加载时间,保证引导过程流畅。
通过本章的分析和介绍,我们将探索如何设计和实现一个既美观又能有效传达应用信息的启动引导页,进而优化用户首次使用应用的体验。接下来,我们将深入了解ViewPager滑动页面切换的原理与实践,探索更丰富的页面交互效果。
2. ViewPager滑动页面切换的原理与实践
滑动页面切换是移动应用中常见的交互模式,ViewPager作为Android中一个实用的组件,广泛应用于实现复杂的页面切换逻辑。接下来,我们将深入探讨ViewPager的基本使用方法、性能优化策略,以及与Fragment结合时的高级用法。
2.1 ViewPager基本使用
ViewPager是Android开发中用于实现页面滑动切换的一个组件,它支持左右滑动来切换不同的页面。这一小节将着重介绍ViewPager的初始化与基本配置,以及如何利用FragmentStatePagerAdapter实现页面管理。
2.1.1 ViewPager的初始化与基本配置
要使用ViewPager,首先需要在布局文件中声明一个ViewPager组件,并通过XML来配置一些基本属性,如 android:id
和 layout_width
等。完成布局配置后,在Activity或Fragment中进行初始化,并设置适配器来管理页面内容。
<!-- activity_main.xml -->
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
在Activity中进行初始化:
ViewPager viewPager = findViewById(R.id.viewpager);
MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
MyPagerAdapter
继承自 FragmentStatePagerAdapter
,用于管理页面数据和视图。
2.1.2 利用FragmentStatePagerAdapter实现页面管理
FragmentStatePagerAdapter
是管理页面状态的一个适配器,特别适合于页面数量较多的情况。它会在页面可见时保留页面状态,并在不必要时销毁页面,以优化内存使用。
public class MyPagerAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
public MyPagerAdapter(FragmentManager manager) {
super(manager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
public void addFragment(Fragment fragment) {
if (!mFragmentList.contains(fragment)) {
mFragmentList.add(fragment);
}
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
}
在Fragment中使用 ViewPager
时,需要将Activity作为参数传入适配器。
2.2 ViewPager滑动性能优化
ViewPager在使用过程中可能会遇到滑动卡顿、响应不灵敏等问题。这通常与适配器数据处理、缓存机制管理不当有关。本节将探讨优化ViewPager滑动响应速度和流畅度的策略,以及如何高效处理ViewPager的缓存机制。
2.2.1 优化滑动响应速度和流畅度
为了提高ViewPager的滑动性能,需要确保数据加载和视图创建的操作尽量不阻塞主线程。可以采取以下几种方法:
使用 AsyncTask
或 HandlerThread
进行数据加载,避免在主线程中执行耗时操作。 在创建视图时,尽量减少布局的复杂性和资源的消耗。 如果需要进行复杂的视图操作,考虑使用 ViewFlipper
或 RecyclerView
来代替 ViewPager
。
2.2.2 如何处理ViewPager的缓存机制
ViewPager
有一个内部缓存机制,用于优化页面切换时的性能。合理设置缓存数量可以显著提高性能,避免不必要的视图重建。
viewPager.setOffscreenPageLimit(N);
其中 N
表示缓存的页面数。一般来说,设置为当前可见页面左右各一个页面是不错的选择。
2.3 ViewPager与Fragment结合的高级用法
ViewPager与Fragment结合时,能够实现更加复杂的页面切换动画效果。同时,Fragment之间的数据共享也是需要考虑的问题。本节将介绍如何实现这些高级用法。
2.3.1 实现复杂的页面切换动画效果
通过实现 ViewPager.PageTransformer
接口,可以自定义页面切换时的动画效果。以下是一个实现页面切换时缩放和透明度变化的示例代码:
viewPager.setPageTransformer(true, new ZoomOutPageTransformer());
public class ZoomOutPageTransformer implements ViewPager.PageTransformer {
private static final float MIN_SCALE = 0.85f;
private static final float MIN_ALPHA = 0.5f;
public void transformPage(View view, float position) {
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
view.setAlpha(0);
} else if (position <= 1) { // [-1,1]
float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
float alphaFactor = Math.max(MIN_ALPHA, 1 - Math.abs(position));
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
view.setAlpha(alphaFactor);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
view.setAlpha(0);
}
}
}
2.3.2 如何在ViewPager中处理Fragment间的数据共享
Fragment之间数据共享可以通过 FragmentManager
或者使用单例模式。但在ViewPager场景下,推荐使用 setUserVisibleHint
方法来监听Fragment的可见性变化,从而在Fragment之间传递数据。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser && getView() != null) {
// 当Fragment可见时,执行相关逻辑
// 可以在这里调用其他Fragment的方法或者更新数据
}
}
以上章节内容展示了ViewPager在页面切换中的基本使用、性能优化以及高级用法。在实际应用中,开发者应根据具体需求灵活运用这些知识,并根据用户反馈和性能测试结果进行相应的调整。
3. 自定义滑动动画PageTransformer的开发与应用
3.1 PageTransformer基础介绍
3.1.1 理解PageTransformer的作用与原理
在Android开发中,ViewPager是常见的滑动切换组件,为了提供更为丰富的用户体验,常常需要对页面切换时的动画效果进行定制。PageTransformer便是用于自定义ViewPager滑动动画的核心类。通过实现PageTransformer接口,可以为ViewPager中的每个页面在显示或者消失时添加自定义的动画效果。
要深入了解PageTransformer的作用与原理,首先需要明白它的工作时机。PageTransformer会在页面切换时调用,具体来说,就是在页面视图变为可见或者从可见变为不可见时,对其执行自定义的变换操作。PageTransformer是通过应用变换矩阵(Matrix)来实现各种动画效果的,如缩放、旋转、倾斜等。
3.1.2 PageTransformer实现的基本步骤
实现一个基本的PageTransformer需要遵循以下步骤:
实现 PageTransformer
接口。 在 transformPage
方法中,根据页面的滚动偏移量进行变换。 使用 setPageTransformer
方法将自定义的Transformer应用到ViewPager上。
下面是一个简单的PageTransformer实现示例,其功能是在页面滚动到中间时放大:
public class ZoomOutPageTransformer implements PageTransformer {
private static final float MIN_SCALE = 0.85f;
@Override
public void transformPage(View page, float position) {
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
page.setAlpha(0);
} else if (position <= 1) { // [-1,1]
// Modify the default slide transition to shrink the page as well
float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
page.setScaleX(scaleFactor);
page.setScaleY(scaleFactor);
page.setAlpha(scaleFactor);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
page.setAlpha(0);
}
}
}
在上面的代码中, transformPage
方法接收两个参数: View page
代表当前页面, float position
代表页面的位置偏移。通过判断位置偏移量,我们可以控制页面的缩放和透明度,从而实现放大效果。
3.2 PageTransformer动画效果创新
3.2.1 实现炫酷的页面切换动画效果
随着应用界面设计的日益复杂和用户对交互体验的要求提高,简单的位置变化已经不能满足需求。实现炫酷的页面切换动画效果成为开发者的追求之一。
下面以一个名为 StackPageTransformer
的PageTransformer实现为例,它会为ViewPager中的每个页面添加一种“堆叠”的视觉效果。当用户滑动时,页面仿佛在空中交错堆叠,达到了一种三维的错觉。
public class StackPageTransformer implements PageTransformer {
private static final float MIN_SCALE = 0.65f;
@Override
public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
view.setAlpha(0);
} else if (position <= 0) { // [-1,0]
// Use the default slide transition when moving to the left page
view.setAlpha(1);
view.setTranslationX(0);
view.setScaleX(1);
view.setScaleY(1);
} else if (position <= 1) { // (0,1]
// Fade the page out.
view.setAlpha(1 - position);
// Counteract the default slide transition
view.setTranslationX(pageWidth * -position);
// Scale the page down (between MIN_SCALE and 1)
float scaleFactor = MIN_SCALE
+ (1 - MIN_SCALE) * (1 - Math.abs(position));
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
view.setAlpha(0);
}
}
}
3.2.2 通过PageTransformer处理复杂的动画交互
复杂的动画交互往往需要对多个页面状态进行精细控制。例如,我们可能需要在滑动时页面之间不仅有视觉上的堆叠效果,还要有互动性,比如页面间传递数据或者触发动画效果。
这样的动画效果可以通过在 transformPage
方法中添加额外的逻辑判断来实现。比如,当用户滑动时,页面间可以产生不同的过渡效果;或者在页面滑动结束时触发特定的动画,如页面的淡入淡出。
3.3 PageTransformer动画性能调优
3.3.1 分析动画性能瓶颈及优化策略
动画性能优化是开发中一个永恒的话题,因为它直接影响到用户的使用体验。使用PageTransformer实现动画时,可能会因为复杂的变换和大量的绘制操作导致性能问题。
性能瓶颈分析可以从以下几个方面着手:
内存占用:通过分析内存分配,找出是否有大量的内存泄漏或者不必要的内存占用。 CPU使用率:监控CPU占用情况,查看是否因执行动画而长时间占用大量CPU资源。 绘制次数:减少视图的绘制次数,比如通过重用视图或者减少视图层级等。 重排和重绘:尽量减少页面变换时的重排和重绘操作。
优化策略可以包括:
使用硬件加速:启用硬件加速可以帮助更快地渲染视图。 减少变换操作:合理使用变换操作,避免在动画中频繁进行复杂的矩阵变换。 延迟加载:在动画结束后或者用户不注意时,进行数据的加载和视图的创建。 缓存视图:对于频繁使用的视图组件,可以预先创建并进行缓存。
3.3.2 实现高效稳定的自定义动画效果
为了实现高效稳定的自定义动画效果,开发者需要深入了解Android的动画系统和渲染机制。以下是一些关键点:
使用属性动画:在Android 3.0(Honeycomb)之后,属性动画提供了更为强大的动画实现方式,允许对任何属性值进行动画处理。 避免过度动画:过多复杂的动画可能会导致性能下降,选择合适的动画效果,避免过度使用。 适配不同设备:在不同的设备上测试动画效果,保证动画在各种屏幕和硬件配置上都能稳定运行。 使用动画监听:通过动画监听器可以更精确地控制动画的执行,比如在动画结束时释放资源或者执行特定逻辑。
通过以上策略,开发者可以确保即使在自定义复杂动画的情况下,也能提供流畅和高效的用户体验。
4. Android动画库的使用及SharedPreferences的应用
4.1 Android动画库的分类与应用
4.1.1 理解并应用View Animation与Object Animation
在Android平台上,动画可以大致分为两大类:View Animation和Object Animation。View Animation针对视图控件进行的,通常是基于XML文件或者通过代码来定义动画效果,而Object Animation则是基于属性动画(Property Animation),它在Android 3.0 (API level 11)中被引入,并且可以在任意对象的属性上进行动画处理。
View Animation较为简单,包含平移动画、旋转动画、缩放动画和透明度动画等几种基本类型,适用于那些不需要改变对象属性值的动画效果。然而,它只能改变视图的视觉效果,并不能真正改变视图的属性。
Object Animation通过改变对象的实际属性值来实现动画效果,这样的动画是真正的、动态的变化。它不仅可以应用于视图,还可以应用于任何对象。属性动画的API提供了时间插值器(Time Interpolator)和动画集(AnimatorSet)来控制动画的运行和组合。
示例代码:使用Object Animation实现平移动画
// 创建一个平移动画对象,初始值为0,目标值为300
ObjectAnimator anim = ObjectAnimator.ofFloat(view, "translationX", 0, 300);
// 设置动画持续时间
anim.setDuration(1000);
// 开始动画
anim.start();
在这个示例中,我们创建了一个ObjectAnimator对象,它会使一个视图(view)沿X轴移动300个像素。参数"translationX"指定了我们希望修改的属性,这是一个视图的属性。 setDuration(1000)
方法用于设置动画的持续时间,单位是毫秒。
Object Animation由于其灵活性,成为了Android开发中实现复杂动画的首选。开发者可以自定义时间插值器和动画集来实现更加丰富和复杂的动画效果。
4.1.2 管理和组织项目中的动画资源
在Android项目中管理动画资源,推荐的做法是将所有的动画定义在XML文件中,并将这些文件放置在项目的 res/anim
目录下。这不仅有助于维护和更新,还可以在不同设备和平台版本上提供一致的用户体验。
动画资源文件的创建和分类
在 res/anim
目录下创建XML文件来定义动画。Android支持多种类型的动画资源文件:
alpha.xml
:定义透明度变化的动画。 scale.xml
:定义缩放动画。 translate.xml
:定义平移动画。 rotate.xml
:定义旋转动画。 set.xml
:定义动画集,可将多个动画组合起来使用。
例如,创建一个平移动画 translate.xml
文件,定义了一个从左到右的平移动画:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="***"
android:fromXDelta="-100%"
android:toXDelta="0%"
android:duration="500">
</translate>
该动画让一个视图从屏幕左侧(-100%)平移到屏幕右侧(0%),动画持续时间为500毫秒。
动画的加载和应用
要加载并应用这些动画资源,可以在代码中使用 AnimationUtils.loadAnimation()
方法来加载动画资源,并通过 startAnimation()
方法将动画应用到目标视图上。
// 加载动画资源
Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.translate);
// 应用动画
view.startAnimation(animation);
通过这种方式,开发者可以更加灵活地控制动画的加载和应用,同时也能够提高代码的可读性和维护性。
总之,合理地使用和组织动画资源,不仅可以使代码更加清晰,还能有效提升应用的性能和用户体验。随着Android开发的不断深入,对动画的应用和管理也会更加重要。
5. 极光推送集成与项目优化
极光推送作为一款成熟的第三方推送服务,被广泛应用于各类移动应用中以实现后台消息下发。本章节将详细介绍极光推送服务的注册、SDK集成以及项目优化的相关步骤,旨在帮助开发者高效实现推送功能并保障应用的稳定运行。
5.1 极光推送服务注册与应用创建
极光推送服务的使用首先需要完成注册和应用创建,这一步是接入推送服务的基础。
5.1.1 注册极光推送服务及创建应用
访问极光官网(***)并注册账号。 登录后前往控制台创建新应用。 填写应用名称、包名以及选择应用类型等信息。
5.1.2 配置推送应用的基本信息
在应用详情中配置推送证书信息,确保推送通道的安全性。 设置应用的别名和标签,用于后续的消息分组和筛选。
5.2 极光推送SDK集成与依赖添加
极光推送SDK的集成是实现推送功能的技术关键,需要按照步骤进行操作。
5.2.1 集成极光推送SDK的步骤
在项目的 build.gradle
文件中添加极光推送SDK依赖。 初始化SDK,一般在应用的 Application
类中的 onCreate
方法中进行。 注册推送服务,需要传入注册成功和失败的回调函数。
// 添加依赖
dependencies {
implementation 'cn.jpush:library:版本号'
}
// 初始化SDK
JPushInterface.setDebugMode(true); // 可选
JPushInterface.init(this);
// 注册推送服务
JPushInterface.registerPush(this, new RegisterCallback() {
@Override
public void done(String regId, ReregisterCallback reregisterCallback) {
Log.d("TAG", "RegisterCallback, regId: " + regId);
// 注册成功处理
}
});
5.2.2 管理极光推送依赖的版本和兼容性
定期检查极光推送官方提供的SDK更新,以便使用最新的功能和修复。 确保所使用的SDK版本与项目依赖的Android版本兼容,避免运行时错误。
5.3 极光推送初始化与消息接收处理
推送服务的初始化及消息接收处理是推送功能实现的核心部分。
5.3.1 极光推送初始化流程和最佳实践
按照官方文档推荐的最佳实践进行初始化,确保所有必要的权限和配置都已就绪。 在初始化时处理异常,确保在初始化失败的情况下能给出明确的错误信息和恢复策略。
5.3.2 处理不同类型的推送消息
实现 MessageListener
接口,以监听接收到的推送消息。 根据消息类型(通知/透传消息)进行相应的处理逻辑。
// 消息接收处理示例
public class MyMessageListener implements JMessageListener {
@Override
public void onMessage(Context context, PushPayload payload) {
// 处理收到的通知消息
}
@Override
public void onNotifyMessageOpened(Context context, PushPayload payload) {
// 处理用户点击通知打开应用后的逻辑
}
}
5.4 Android版本兼容性注意
推送服务在不同Android版本的兼容性是开发过程中需要注意的问题。
5.4.1 兼容不同Android版本的推送问题
根据Android版本的不同,某些API可能存在差异,需要进行特定的版本适配。 对于高版本Android系统中的权限要求,如Android O的后台限制,应提供兼容方案。
5.4.2 保证极光推送在各Android版本上的稳定性
测试不同Android版本下的推送功能,确保无兼容性问题。 关注极光推送的更新日志,及时应用SDK中的新特性或修复项,提高兼容性。
综上所述,极光推送服务的集成与优化涉及多个步骤和细节处理。开发者在进行极光推送集成时,应严格遵守官方文档的指导,并结合项目需求进行适当的定制和优化,以确保推送服务的稳定性和有效性。
本文还有配套的精品资源,点击获取
简介:本项目主要教授如何在安卓应用中实现项目引导界面和集成极光推送服务。引导界面设计涉及滑动页面、图片展示和动画效果,以提升用户体验。集成极光推送则包括注册开发者账号、添加SDK依赖、初始化服务、消息处理以及解决组件缺失等问题,以便开发者能够顺利地将推送功能整合到应用中。
本文还有配套的精品资源,点击获取
本文还有配套的精品资源,点击获取
简介:本项目主要教授如何在安卓应用中实现项目引导界面和集成极光推送服务。引导界面设计涉及滑动页面、图片展示和动画效果,以提升用户体验。集成极光推送则包括注册开发者账号、添加SDK依赖、初始化服务、消息处理以及解决组件缺失等问题,以便开发者能够顺利地将推送功能整合到应用中。
1. 应用启动引导页设计与实现
随着移动互联网的发展,应用的用户界面(User Interface, UI)和用户体验(User Experience, UX)越来越受到重视。一个好的应用启动引导页可以给用户留下深刻的第一印象,引导用户快速了解应用的主要功能和操作方式。本章将探讨启动引导页的设计理念、实现方法和优化技巧。
1.1 引导页设计原则
启动引导页的主要目的是引导新用户熟悉应用,为他们提供一个直观、易懂的入门体验。设计原则应遵循简洁、直观、高效三大要点。
简洁性 :避免在引导页上放置过多的文字或复杂的背景,以免分散用户的注意力。 直观性 :使用直观的图像或动画来展示应用的核心功能和操作流程。 高效性 :确保引导流程简短明了,避免过多的步骤,以免造成用户的疲劳感。
1.2 实现引导页的技术方案
实现引导页的技术方案可以分为前端展示和后端存储两大部分。前端主要负责图像和动画的展示,后端负责记录用户是否已看过引导页。
前端展示 :可以使用Android中的Activity或者iOS中的UIViewController配合动画库来实现。 后端存储 :利用SharedPreferences或者轻量级数据库来记录用户对引导页的查看状态。
1.3 引导页的优化技巧
为了提升用户体验,我们可以在引导页中加入一些优化技巧,如:
动态引导内容 :根据用户的操作历史,动态调整引导内容。 智能跳过机制 :检测用户是否已经熟悉应用,如果用户对操作流程比较熟悉,可以提供跳过引导页的选项。 后台预加载资源 :在启动应用时,后台预加载引导页所需的资源,以减少加载时间,保证引导过程流畅。
通过本章的分析和介绍,我们将探索如何设计和实现一个既美观又能有效传达应用信息的启动引导页,进而优化用户首次使用应用的体验。接下来,我们将深入了解ViewPager滑动页面切换的原理与实践,探索更丰富的页面交互效果。
2. ViewPager滑动页面切换的原理与实践
滑动页面切换是移动应用中常见的交互模式,ViewPager作为Android中一个实用的组件,广泛应用于实现复杂的页面切换逻辑。接下来,我们将深入探讨ViewPager的基本使用方法、性能优化策略,以及与Fragment结合时的高级用法。
2.1 ViewPager基本使用
ViewPager是Android开发中用于实现页面滑动切换的一个组件,它支持左右滑动来切换不同的页面。这一小节将着重介绍ViewPager的初始化与基本配置,以及如何利用FragmentStatePagerAdapter实现页面管理。
2.1.1 ViewPager的初始化与基本配置
要使用ViewPager,首先需要在布局文件中声明一个ViewPager组件,并通过XML来配置一些基本属性,如 android:id
和 layout_width
等。完成布局配置后,在Activity或Fragment中进行初始化,并设置适配器来管理页面内容。
<!-- activity_main.xml -->
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
在Activity中进行初始化:
ViewPager viewPager = findViewById(R.id.viewpager);
MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
MyPagerAdapter
继承自 FragmentStatePagerAdapter
,用于管理页面数据和视图。
2.1.2 利用FragmentStatePagerAdapter实现页面管理
FragmentStatePagerAdapter
是管理页面状态的一个适配器,特别适合于页面数量较多的情况。它会在页面可见时保留页面状态,并在不必要时销毁页面,以优化内存使用。
public class MyPagerAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
public MyPagerAdapter(FragmentManager manager) {
super(manager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
public void addFragment(Fragment fragment) {
if (!mFragmentList.contains(fragment)) {
mFragmentList.add(fragment);
}
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
}
在Fragment中使用 ViewPager
时,需要将Activity作为参数传入适配器。
2.2 ViewPager滑动性能优化
ViewPager在使用过程中可能会遇到滑动卡顿、响应不灵敏等问题。这通常与适配器数据处理、缓存机制管理不当有关。本节将探讨优化ViewPager滑动响应速度和流畅度的策略,以及如何高效处理ViewPager的缓存机制。
2.2.1 优化滑动响应速度和流畅度
为了提高ViewPager的滑动性能,需要确保数据加载和视图创建的操作尽量不阻塞主线程。可以采取以下几种方法:
使用 AsyncTask
或 HandlerThread
进行数据加载,避免在主线程中执行耗时操作。 在创建视图时,尽量减少布局的复杂性和资源的消耗。 如果需要进行复杂的视图操作,考虑使用 ViewFlipper
或 RecyclerView
来代替 ViewPager
。
2.2.2 如何处理ViewPager的缓存机制
ViewPager
有一个内部缓存机制,用于优化页面切换时的性能。合理设置缓存数量可以显著提高性能,避免不必要的视图重建。
viewPager.setOffscreenPageLimit(N);
其中 N
表示缓存的页面数。一般来说,设置为当前可见页面左右各一个页面是不错的选择。
2.3 ViewPager与Fragment结合的高级用法
ViewPager与Fragment结合时,能够实现更加复杂的页面切换动画效果。同时,Fragment之间的数据共享也是需要考虑的问题。本节将介绍如何实现这些高级用法。
2.3.1 实现复杂的页面切换动画效果
通过实现 ViewPager.PageTransformer
接口,可以自定义页面切换时的动画效果。以下是一个实现页面切换时缩放和透明度变化的示例代码:
viewPager.setPageTransformer(true, new ZoomOutPageTransformer());
public class ZoomOutPageTransformer implements ViewPager.PageTransformer {
private static final float MIN_SCALE = 0.85f;
private static final float MIN_ALPHA = 0.5f;
public void transformPage(View view, float position) {
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
view.setAlpha(0);
} else if (position <= 1) { // [-1,1]
float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
float alphaFactor = Math.max(MIN_ALPHA, 1 - Math.abs(position));
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
view.setAlpha(alphaFactor);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
view.setAlpha(0);
}
}
}
2.3.2 如何在ViewPager中处理Fragment间的数据共享
Fragment之间数据共享可以通过 FragmentManager
或者使用单例模式。但在ViewPager场景下,推荐使用 setUserVisibleHint
方法来监听Fragment的可见性变化,从而在Fragment之间传递数据。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser && getView() != null) {
// 当Fragment可见时,执行相关逻辑
// 可以在这里调用其他Fragment的方法或者更新数据
}
}
以上章节内容展示了ViewPager在页面切换中的基本使用、性能优化以及高级用法。在实际应用中,开发者应根据具体需求灵活运用这些知识,并根据用户反馈和性能测试结果进行相应的调整。
3. 自定义滑动动画PageTransformer的开发与应用
3.1 PageTransformer基础介绍
3.1.1 理解PageTransformer的作用与原理
在Android开发中,ViewPager是常见的滑动切换组件,为了提供更为丰富的用户体验,常常需要对页面切换时的动画效果进行定制。PageTransformer便是用于自定义ViewPager滑动动画的核心类。通过实现PageTransformer接口,可以为ViewPager中的每个页面在显示或者消失时添加自定义的动画效果。
要深入了解PageTransformer的作用与原理,首先需要明白它的工作时机。PageTransformer会在页面切换时调用,具体来说,就是在页面视图变为可见或者从可见变为不可见时,对其执行自定义的变换操作。PageTransformer是通过应用变换矩阵(Matrix)来实现各种动画效果的,如缩放、旋转、倾斜等。
3.1.2 PageTransformer实现的基本步骤
实现一个基本的PageTransformer需要遵循以下步骤:
实现 PageTransformer
接口。 在 transformPage
方法中,根据页面的滚动偏移量进行变换。 使用 setPageTransformer
方法将自定义的Transformer应用到ViewPager上。
下面是一个简单的PageTransformer实现示例,其功能是在页面滚动到中间时放大:
public class ZoomOutPageTransformer implements PageTransformer {
private static final float MIN_SCALE = 0.85f;
@Override
public void transformPage(View page, float position) {
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
page.setAlpha(0);
} else if (position <= 1) { // [-1,1]
// Modify the default slide transition to shrink the page as well
float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
page.setScaleX(scaleFactor);
page.setScaleY(scaleFactor);
page.setAlpha(scaleFactor);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
page.setAlpha(0);
}
}
}
在上面的代码中, transformPage
方法接收两个参数: View page
代表当前页面, float position
代表页面的位置偏移。通过判断位置偏移量,我们可以控制页面的缩放和透明度,从而实现放大效果。
3.2 PageTransformer动画效果创新
3.2.1 实现炫酷的页面切换动画效果
随着应用界面设计的日益复杂和用户对交互体验的要求提高,简单的位置变化已经不能满足需求。实现炫酷的页面切换动画效果成为开发者的追求之一。
下面以一个名为 StackPageTransformer
的PageTransformer实现为例,它会为ViewPager中的每个页面添加一种“堆叠”的视觉效果。当用户滑动时,页面仿佛在空中交错堆叠,达到了一种三维的错觉。
public class StackPageTransformer implements PageTransformer {
private static final float MIN_SCALE = 0.65f;
@Override
public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
view.setAlpha(0);
} else if (position <= 0) { // [-1,0]
// Use the default slide transition when moving to the left page
view.setAlpha(1);
view.setTranslationX(0);
view.setScaleX(1);
view.setScaleY(1);
} else if (position <= 1) { // (0,1]
// Fade the page out.
view.setAlpha(1 - position);
// Counteract the default slide transition
view.setTranslationX(pageWidth * -position);
// Scale the page down (between MIN_SCALE and 1)
float scaleFactor = MIN_SCALE
+ (1 - MIN_SCALE) * (1 - Math.abs(position));
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
view.setAlpha(0);
}
}
}
3.2.2 通过PageTransformer处理复杂的动画交互
复杂的动画交互往往需要对多个页面状态进行精细控制。例如,我们可能需要在滑动时页面之间不仅有视觉上的堆叠效果,还要有互动性,比如页面间传递数据或者触发动画效果。
这样的动画效果可以通过在 transformPage
方法中添加额外的逻辑判断来实现。比如,当用户滑动时,页面间可以产生不同的过渡效果;或者在页面滑动结束时触发特定的动画,如页面的淡入淡出。
3.3 PageTransformer动画性能调优
3.3.1 分析动画性能瓶颈及优化策略
动画性能优化是开发中一个永恒的话题,因为它直接影响到用户的使用体验。使用PageTransformer实现动画时,可能会因为复杂的变换和大量的绘制操作导致性能问题。
性能瓶颈分析可以从以下几个方面着手:
内存占用:通过分析内存分配,找出是否有大量的内存泄漏或者不必要的内存占用。 CPU使用率:监控CPU占用情况,查看是否因执行动画而长时间占用大量CPU资源。 绘制次数:减少视图的绘制次数,比如通过重用视图或者减少视图层级等。 重排和重绘:尽量减少页面变换时的重排和重绘操作。
优化策略可以包括:
使用硬件加速:启用硬件加速可以帮助更快地渲染视图。 减少变换操作:合理使用变换操作,避免在动画中频繁进行复杂的矩阵变换。 延迟加载:在动画结束后或者用户不注意时,进行数据的加载和视图的创建。 缓存视图:对于频繁使用的视图组件,可以预先创建并进行缓存。
3.3.2 实现高效稳定的自定义动画效果
为了实现高效稳定的自定义动画效果,开发者需要深入了解Android的动画系统和渲染机制。以下是一些关键点:
使用属性动画:在Android 3.0(Honeycomb)之后,属性动画提供了更为强大的动画实现方式,允许对任何属性值进行动画处理。 避免过度动画:过多复杂的动画可能会导致性能下降,选择合适的动画效果,避免过度使用。 适配不同设备:在不同的设备上测试动画效果,保证动画在各种屏幕和硬件配置上都能稳定运行。 使用动画监听:通过动画监听器可以更精确地控制动画的执行,比如在动画结束时释放资源或者执行特定逻辑。
通过以上策略,开发者可以确保即使在自定义复杂动画的情况下,也能提供流畅和高效的用户体验。
4. Android动画库的使用及SharedPreferences的应用
4.1 Android动画库的分类与应用
4.1.1 理解并应用View Animation与Object Animation
在Android平台上,动画可以大致分为两大类:View Animation和Object Animation。View Animation针对视图控件进行的,通常是基于XML文件或者通过代码来定义动画效果,而Object Animation则是基于属性动画(Property Animation),它在Android 3.0 (API level 11)中被引入,并且可以在任意对象的属性上进行动画处理。
View Animation较为简单,包含平移动画、旋转动画、缩放动画和透明度动画等几种基本类型,适用于那些不需要改变对象属性值的动画效果。然而,它只能改变视图的视觉效果,并不能真正改变视图的属性。
Object Animation通过改变对象的实际属性值来实现动画效果,这样的动画是真正的、动态的变化。它不仅可以应用于视图,还可以应用于任何对象。属性动画的API提供了时间插值器(Time Interpolator)和动画集(AnimatorSet)来控制动画的运行和组合。
示例代码:使用Object Animation实现平移动画
// 创建一个平移动画对象,初始值为0,目标值为300
ObjectAnimator anim = ObjectAnimator.ofFloat(view, "translationX", 0, 300);
// 设置动画持续时间
anim.setDuration(1000);
// 开始动画
anim.start();
在这个示例中,我们创建了一个ObjectAnimator对象,它会使一个视图(view)沿X轴移动300个像素。参数"translationX"指定了我们希望修改的属性,这是一个视图的属性。 setDuration(1000)
方法用于设置动画的持续时间,单位是毫秒。
Object Animation由于其灵活性,成为了Android开发中实现复杂动画的首选。开发者可以自定义时间插值器和动画集来实现更加丰富和复杂的动画效果。
4.1.2 管理和组织项目中的动画资源
在Android项目中管理动画资源,推荐的做法是将所有的动画定义在XML文件中,并将这些文件放置在项目的 res/anim
目录下。这不仅有助于维护和更新,还可以在不同设备和平台版本上提供一致的用户体验。
动画资源文件的创建和分类
在 res/anim
目录下创建XML文件来定义动画。Android支持多种类型的动画资源文件:
alpha.xml
:定义透明度变化的动画。 scale.xml
:定义缩放动画。 translate.xml
:定义平移动画。 rotate.xml
:定义旋转动画。 set.xml
:定义动画集,可将多个动画组合起来使用。
例如,创建一个平移动画 translate.xml
文件,定义了一个从左到右的平移动画:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="***"
android:fromXDelta="-100%"
android:toXDelta="0%"
android:duration="500">
</translate>
该动画让一个视图从屏幕左侧(-100%)平移到屏幕右侧(0%),动画持续时间为500毫秒。
动画的加载和应用
要加载并应用这些动画资源,可以在代码中使用 AnimationUtils.loadAnimation()
方法来加载动画资源,并通过 startAnimation()
方法将动画应用到目标视图上。
// 加载动画资源
Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.translate);
// 应用动画
view.startAnimation(animation);
通过这种方式,开发者可以更加灵活地控制动画的加载和应用,同时也能够提高代码的可读性和维护性。
总之,合理地使用和组织动画资源,不仅可以使代码更加清晰,还能有效提升应用的性能和用户体验。随着Android开发的不断深入,对动画的应用和管理也会更加重要。
5. 极光推送集成与项目优化
极光推送作为一款成熟的第三方推送服务,被广泛应用于各类移动应用中以实现后台消息下发。本章节将详细介绍极光推送服务的注册、SDK集成以及项目优化的相关步骤,旨在帮助开发者高效实现推送功能并保障应用的稳定运行。
5.1 极光推送服务注册与应用创建
极光推送服务的使用首先需要完成注册和应用创建,这一步是接入推送服务的基础。
5.1.1 注册极光推送服务及创建应用
访问极光官网(***)并注册账号。 登录后前往控制台创建新应用。 填写应用名称、包名以及选择应用类型等信息。
5.1.2 配置推送应用的基本信息
在应用详情中配置推送证书信息,确保推送通道的安全性。 设置应用的别名和标签,用于后续的消息分组和筛选。
5.2 极光推送SDK集成与依赖添加
极光推送SDK的集成是实现推送功能的技术关键,需要按照步骤进行操作。
5.2.1 集成极光推送SDK的步骤
在项目的 build.gradle
文件中添加极光推送SDK依赖。 初始化SDK,一般在应用的 Application
类中的 onCreate
方法中进行。 注册推送服务,需要传入注册成功和失败的回调函数。
// 添加依赖
dependencies {
implementation 'cn.jpush:library:版本号'
}
// 初始化SDK
JPushInterface.setDebugMode(true); // 可选
JPushInterface.init(this);
// 注册推送服务
JPushInterface.registerPush(this, new RegisterCallback() {
@Override
public void done(String regId, ReregisterCallback reregisterCallback) {
Log.d("TAG", "RegisterCallback, regId: " + regId);
// 注册成功处理
}
});
5.2.2 管理极光推送依赖的版本和兼容性
定期检查极光推送官方提供的SDK更新,以便使用最新的功能和修复。 确保所使用的SDK版本与项目依赖的Android版本兼容,避免运行时错误。
5.3 极光推送初始化与消息接收处理
推送服务的初始化及消息接收处理是推送功能实现的核心部分。
5.3.1 极光推送初始化流程和最佳实践
按照官方文档推荐的最佳实践进行初始化,确保所有必要的权限和配置都已就绪。 在初始化时处理异常,确保在初始化失败的情况下能给出明确的错误信息和恢复策略。
5.3.2 处理不同类型的推送消息
实现 MessageListener
接口,以监听接收到的推送消息。 根据消息类型(通知/透传消息)进行相应的处理逻辑。
// 消息接收处理示例
public class MyMessageListener implements JMessageListener {
@Override
public void onMessage(Context context, PushPayload payload) {
// 处理收到的通知消息
}
@Override
public void onNotifyMessageOpened(Context context, PushPayload payload) {
// 处理用户点击通知打开应用后的逻辑
}
}
5.4 Android版本兼容性注意
推送服务在不同Android版本的兼容性是开发过程中需要注意的问题。
5.4.1 兼容不同Android版本的推送问题
根据Android版本的不同,某些API可能存在差异,需要进行特定的版本适配。 对于高版本Android系统中的权限要求,如Android O的后台限制,应提供兼容方案。
5.4.2 保证极光推送在各Android版本上的稳定性
测试不同Android版本下的推送功能,确保无兼容性问题。 关注极光推送的更新日志,及时应用SDK中的新特性或修复项,提高兼容性。
综上所述,极光推送服务的集成与优化涉及多个步骤和细节处理。开发者在进行极光推送集成时,应严格遵守官方文档的指导,并结合项目需求进行适当的定制和优化,以确保推送服务的稳定性和有效性。
本文还有配套的精品资源,点击获取
简介:本项目主要教授如何在安卓应用中实现项目引导界面和集成极光推送服务。引导界面设计涉及滑动页面、图片展示和动画效果,以提升用户体验。集成极光推送则包括注册开发者账号、添加SDK依赖、初始化服务、消息处理以及解决组件缺失等问题,以便开发者能够顺利地将推送功能整合到应用中。
本文还有配套的精品资源,点击获取
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1742535638)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1742535638)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1742602243)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1742602243)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743482223)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743482223)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743487722)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743487722)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743569508)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743569508)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743598540)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743598540)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743624825)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743624825)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743658728)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743658728)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743662635)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743662635)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743785781)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743785781)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743880070)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743880070)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743889286)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743889286)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743890170)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743890170)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743890408)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743890408)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743913318)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743913318)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743968985)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743968985)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743981493)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743981493)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743989623)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743989623)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1743992294)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1743992294)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1095, humandate(1744028950)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(26))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)
Error[2]: Trying to access array offset on value of type int, File: /www/wwwroot/www.usbmi.com/xiunophp/xiunophp.min.php, Line: 54
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 1096, humandate(1744028950)
File: /www/wwwroot/www.usbmi.com/tmp/model_thread.func.php, Line: 662, well_thread_format(array(27))
File: /www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm, Line: 249, well_thread_find_asc(array(20) , 20)
File: /www/wwwroot/www.usbmi.com/tmp/route_read.php, Line: 204, include(/www/wwwroot/www.usbmi.com/tmp/view_template_d8_htm_read.htm)
File: /www/wwwroot/www.usbmi.com/tmp/index.inc.php, Line: 129, include(/www/wwwroot/www.usbmi.com/tmp/route_read.php)
File: /www/wwwroot/www.usbmi.com/index.php, Line: 29, include(/www/wwwroot/www.usbmi.com/tmp/index.inc.php)