android - 关于从 firebase android studio 中检索创建动态列表视图
问题描述
当我尝试使用 ListView 从 firebase 检索数据时,我遇到了无限运行,我不知道该如何解决。
我的主要目标是从 Firebase 中检索具有“未批准”状态的动态数量的客户。
这是我的 RUN
10/03 21:30:58:启动应用程序 $ adb shell am start -n "com.example.atheer.booklyv1/com.example.atheer.booklyv1.MainActivity" -a android.intent.action.MAIN -c android。 intent.category.LAUNCHER 客户端尚未准备好..等待进程上线连接到设备 emulator-5554 上的进程 8309 捕获并显示来自应用程序的 logcat 消息。可以在“调试器”设置页面的“Logcat 输出”部分禁用此行为。W/atheer.booklyv:不会记录 JIT 配置文件信息:配置文件不存在。I/chatty: uid=10086(com.example.atheer.booklyv1) 相同的 10 行 W/atheer.booklyv:不会记录 JIT 配置文件信息:配置文件不存在。W/atheer.booklyv:不支持的类加载器 W/atheer.booklyv:由于不支持的类加载器 W/DynamiteModule 跳过重复类检查:未找到 com.google.firebase.auth 的本地模块描述符类。W/DynamiteModule:未找到 com.google.firebase.auth 的本地模块描述符类。W/atheer.booklyv:验证 android.content.Intent com.google.android.gms.common.zzf.zza(android.content.Context, int, java.lang.String) 花了 130.356 毫秒 I/BiChannelGoogleApi:[FirebaseAuth : ] 没有后备模块;未设置延迟初始化 D/FirebaseAuth:通知 id 令牌侦听器有关用户 ( N72Vpxaf6dao4pSf5cvBJ1jwzGo2 )。D/FirebaseApp:com.google.firebase.crash.FirebaseCrash 未链接。跳过初始化。V/FA:取消作业。JobID:-1422956107 V/FA:注册活动生命周期回调 I/FirebaseInitProvider:FirebaseApp 初始化成功 I/InstantRun: 启动即时运行 server: is main process V/FA: Collection enabled V/FA: App package, google app id: com.example.atheer.booklyv1, 1:666514046827:android:60ad4570c33e1aec I/FA :应用程序测量正在启动,版本:11910 要启用调试日志记录,请运行:adb shell setprop log.tag.FA VERBOSE 要启用更快的调试模式事件日志记录,请运行:adb shell setprop debug.firebase.analytics.app com.example.atheer。 booklyv1 D/FA:启用调试级消息日志记录 W/DynamiteModule:未找到 com.google.firebase.auth 的本地模块描述符类。V/FA: onActivityCreated V/FA: 连接到远程服务 I/FirebaseAuth: [FirebaseAuth:] 通过 FirebaseOptions 加载模块。[Firebase 身份验证:] 准备创建与 gms 实施 V/FA 的服务连接:连接尝试已在进行中 W/atheer.booklyv:访问隐藏方法 Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;) Z(浅灰名单,反射) W/atheer.booklyv:访问隐藏方法 Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V(浅灰名单,反射) D/OpenGLRenderer:Skia GL Pipeline V/FA:连接尝试已在进行中活动恢复,时间:1574868 I/FA:未找到跟踪代码管理器,因此不会使用 D/FirebaseApp:通知身份验证状态侦听器。D/FirebaseApp:通知 0 个身份验证状态侦听器。D/FA: 记录事件 (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_screen_class(_sc)=MainActivity, 连接到远程服务 V/FA:处理排队的服务任务:4 V/StudioProfiler:已连接 StudioProfilers 代理。V/StudioProfiler:获取事件应用程序 V/StudioProfiler:转换后的类:java/net/URL W/atheer.booklyv:当前的 dex 文件中有多个类。如果没有对其应用任何转换,则对此类调用 RetransformClasses 可能会失败!V/StudioProfiler:内存控制流已启动。V/StudioProfiler:禁用实时内存跟踪。V/StudioProfiler:启用实时内存跟踪。JNIEnv 未附加 V/StudioProfiler:加载的类:11553 V/StudioProfiler:跟踪初始化耗时:410566000ns W/ActivityThread:handleWindowVisibility:令牌没有活动 android.os.BinderProxy@f188cbd V/FA:记录用户参与度,毫秒:4164 V/ FA:活动暂停,时间:令牌 android.os.BinderProxy@877a26c V/FA:记录用户参与度,毫秒:4828 V/FA:活动暂停,时间:1585022 V/FA:onActivityCreated D/FA:记录事件 (FE):user_engagement(_e ), Bundle[{firebase_event_origin(_o)=auto,engagement_time_msec(_et)=4828, firebase_screen_class(_sc)=mHomePage, firebase_screen_id(_si)=5185910341027462404}] I/DynamiteModule:考虑本地模块 com.google.android.gms.firebase_database :4 和远程模块 com.google.android.gms.firebase_database:6 com.google.android.gms.firebase_database 的选定远程版本,版本 >= 6 V/FA:活动恢复,时间:1585685 I/Choreographer:跳过 37帧!应用程序可能在其主线程上做了太多工作。W/atheer.booklyv:不支持的类加载器 W/atheer.booklyv:由于不支持的类加载器 D/FA 跳过重复类检查:记录事件 (FE):screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=mHomePage, firebase_previous_id(_pi)=5185910341027462404, firebase_screen_class(_sc )=loginActivity, firebase_screen_id(_si)=5185910341027462405}] I/OpenGLRenderer:戴维!持续时间=916ms;Flags=1, IntendedVsync=1585088907737, Vsync=1585705574379, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=1585721516670, AnimationStart=1585721565670, PerformTraversalsStart=1585722412670, DrawStart=1586003516670, SyncQueued=1586003568670, SyncStart=1586003659670, IssueDrawCommandsStart=1586003710670, SwapBuffers= 1586004070670,FrameCompleted=1586005330670,DequeueBufferDuration=162000,QueueBufferDuration=300000,D/EGL_emulation:eglMakeCurrent:0xcc20f240:ver 3 0 (tinfo 0xe2730c60) D/NetworkSecurityConfig:未指定网络安全配置,使用平台默认 I/AssistStructure:扁平化最终辅助数据:3404 字节,包含 1 个窗口,11 个视图 V/FA:不活动,断开连接服务 I/AssistStructure:扁平化最终辅助数据:3428 字节,包含 1 个窗口,11 个视图 W/BiChannelGoogleApi:[FirebaseAuth:] getGoogleApiForMethod() 返回 Gms D/FirebaseAuth:通知 id 令牌侦听器有关用户 ( N72Vpxaf6dao4pSf5cvBJ1jwzGo2 )。D/FirebaseApp:通知身份验证状态侦听器。D/FirebaseApp:通知 1 个身份验证状态侦听器。V/FA:记录用户参与度,毫秒:21363 V/FA:连接到远程服务 W/ActivityThread:handleWindowVisibility:令牌 android.os.BinderProxy@48f31b0 没有活动 V/FA:活动暂停,时间:firebase_screen_id(_si)=5185910341027462407}] D/EGL_emulation: eglMakeCurrent: 0xcc20f240: ver 3 0 (tinfo 0xe2730c60) D/EGL_emulation: eglMakeCurrent: 0xcc20f240: ver 3 0 (tinfo 0xe2730c60) W/atheer. Thread[1,tid=8309,Native,Thread*=0xe6674000,peer=0x738f9ec8,"main"] 暂停!D/EGL_emulation:eglMakeCurrent:0xcc20f240:ver 3 0(tinfo 0xe2730c60) D/EGL_emulation:eglMakeCurrent:0xcc20f240:ver 3 0(tinfo 0xe2730c60) D/EGL_emulation:eglMakeCurrent:0xcc20f240:ver 3 0(tinfo/0xe273) , 与服务断开连接 E/StudioProfiler: JVMTI 错误: 15(JVMTI_ERROR_THREAD_NOT_ALIVE) I/chatty: uid=10086(com.example.atheer.booklyv1) Binder:8309_5 相同的 3 行 E/StudioProfiler: JVMTI 错误: 15(JVMTI_ERROR_THREAD_NOT_ALIVE) I /FirebaseAuth:[FirebaseAuth:] 通过 FirebaseOptions 加载模块。I/FirebaseAuth: [FirebaseAuth:] 准备创建与 gms 实现的服务连接
这是我的java代码
package com.example.atheer.booklyv1;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.Map;
public class approvedAdmin extends AppCompatActivity implements View.OnClickListener{
DatabaseReference dref;
ListView listview;
ArrayList<String> list=new ArrayList<>();
ArrayAdapter<String> adapter;
public approvedAdmin() {
}
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_approved_admin);
listview=(ListView)findViewById(R.id.list);
dref= FirebaseDatabase.getInstance().getReference("client");
// adapter.notifyDataSetChanged();
dref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String status;
String name;
String email;
Toast.makeText(approvedAdmin.this, "ok", Toast.LENGTH_SHORT).show();
for(DataSnapshot ds: dataSnapshot.getChildren() ){
if (ds.hasChild("Status")){
status=ds.child("Status").getValue(String.class);
if (status.equalsIgnoreCase("Not approved")){
name= ds.child("name").getValue(String.class);
list.add(name);
adapter= new ArrayAdapter<String>(approvedAdmin.this, android.R.layout.simple_list_item_1, list);
listview.setAdapter(adapter);
}}
}}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onClick(View v) {
}
}
这是我的 xml 代码
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".approvedAdmin">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical"
android:paddingLeft="15dp"
android:paddingRight="15dp">
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
解决方案
您需要从 for 循环中移出设置适配器代码,如下所示
for(DataSnapshot ds: dataSnapshot.getChildren() ){
if (ds.hasChild("Status")){
status=ds.child("Status").getValue(String.class);
if (status.equalsIgnoreCase("Not approved")){
name= ds.child("name").getValue(String.class);
list.add(name);
}
}
}
adapter= new ArrayAdapter<String>(approvedAdmin.this, android.R.layout.simple_list_item_1, list);
listview.setAdapter(adapter);
您还需要将列表视图 ID 从更改android:id="@android:id/list"
为android:id="@+id/list"
推荐阅读
- powershell - 难以将安全字符串传递给 system.data.odbc.odbcconnection 对象
- java - 使用电容器应用程序的 Angular8 无法从 android studio 登录
- swiftui - 无法使我的状态栏颜色与 SiwftUI 中的 UINavigationBar 颜色匹配
- php - 使用 Artisan::call() 的 Spatie 备份无法删除临时文件夹
- node.js - 尝试在 NodeJS 中使用 aws-sdk 在 S3 中创建文件夹时访问被拒绝
- spring-security - Spring security WebSecurityConfigurerAdapter 读取 application.properties
- java - 基于角色/域组 Active Directory 的 Java Spring 访问
- arduino - 步进电机旋转不正确/不精确
- python-3.x - Python3:从套接字读取行时由对等方重置连接
- maven - 无法访问詹金斯工作区内的目录