首页 > 解决方案 > 关于从 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>

标签: androidlistview

解决方案


您需要从 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"


推荐阅读