关于如何从Firebase android studio检索中创建动态列表视图

时间:2018-10-03 19:04:54

标签: android listview

当我尝试使用ListView从Firebase检索数据时,我遇到了无限运行,而且我不知道该如何解决。

我的主要目标是从Firebase检索具有动态状态为“未批准”的客户。

这是我的跑步

  

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客户端尚未准备好..正在等待过程在线连接到   设备模拟器-5554上的进程8309捕获和​​显示logcat   来自应用程序的消息。可以在   “调试器”设置页面的“ Logcat输出”部分。   W / atheer.booklyv:不会记录JIT配置文件信息:   配置文件不退出。我/聊天:   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.356ms I / BiChannelGoogleApi:[FirebaseAuth:   ]没有回退模块;没有设置延迟初始化   D / FirebaseAuth:通知ID令牌侦听器有关用户的信息(   N72Vpxaf6dao4pSf5cvBJ1jwzGo2)。 D / FirebaseApp:   com.google.firebase.crash.FirebaseCrash未链接。跳过   初始化。 V / FA:取消作业。职位编号:-1422956107 V / FA:   注册的活动生命周期回调I / FirebaseInitProvider:   FirebaseApp初始化成功I / InstantRun:立即启动   运行服务器:是主进程V / FA:已启用收藏V / FA:应用   包,Google应用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的模块。                   [FirebaseAuth:]准备创建与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(light   灰名单,反射)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,   firebase_screen_id(_si)= 5185910341027462403}] D /:   HostConnection :: get()建立新的主机连接0xdeffec40,tid   8354 I / ConfigStore:   android :: hardware :: configstore :: V1_0 :: ISurfaceFlingerConfigs :: hasWideColorDisplay   检索:0                  android :: hardware :: configstore :: V1_0 :: ISurfaceFlingerConfigs :: hasHDRDisplay   检索:0 I / OpenGLRenderer:初始化的EGL,版本1.4   D / OpenGLRenderer:交换行为1 W / OpenGLRenderer:选择失败   使用EGL_SWAP_BEHAVIOR_PRESERVED进行配置,无需重试即可...   D / OpenGLRenderer:交换行为0 D / EGL_emulation:eglCreateContext:   0xcc20f240:maj 3分钟0 rcv 3 D / EGL_emulation:eglMakeCurrent:   0xcc20f240:版本3 0(tinfo 0xe2730c60)D / EGL_emulation:   eglMakeCurrent:0xcc20f240:ver 3 0(tinfo 0xe2730c60)V / FA:   连接尝试已在进行中D / FA:已连接到远程   服务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:记录用户参与度,   ms:4164 V / FA:活动已暂停,时间:1579010 V / FA:onActivityCreated   I / atheer.booklyv:后台并发复制GC已释放662(4MB)   AllocSpace对象,0(0B)个LOS对象,49%空闲,3MB / 6MB,已暂停   D / FA:总计1.122毫秒,总计328.178毫秒; D / FA:记录事件(FE):user_engagement(_e),Bundle [{firebase_event_origin(_o)= auto,   partnership_time_msec(_et)= 4164,   firebase_screen_class(_sc)= MainActivity,   firebase_screen_id(_si)= 5185910341027462403}] V / FA:活动已恢复,   时间:1580197 D / FA:记录事件(FE):screen_view(_vs),   Bundle [{firebase_event_origin(_o)= auto,   firebase_previous_class(_pc)= MainActivity,   firebase_previous_id(_pi)= 5185910341027462403,   firebase_screen_class(_sc)= mHomePage,   firebase_screen_id(_si)= 5185910341027462404}] D / EGL_emulation:   eglMakeCurrent:0xcc20f240:ver 3 0(tinfo 0xe2730c60)   W / ActivityThread:handleWindowVisibility:令牌没有活动   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,   lation_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 /编舞:跳过37帧!的   应用程序可能在其主线程上做太多工作。   W / atheer.booklyv:不支持的类加载器W / atheer.booklyv:跳过   由于不支持的类加载器D / FA,重复的类检查:日志记录   事件(FE):screen_view(_vs),捆绑包[{firebase_event_origin(_o)=自动,   firebase_previous_class(_pc)= mHomePage,   firebase_previous_id(_pi)= 5185910341027462404,   firebase_screen_class(_sc)= loginActivity,   firebase_screen_id(_si)= 5185910341027462405}] I / OpenGLRenderer:Davey!   持续时间= 916ms;标志= 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:平整的final   辅助数据: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:活动已暂停,时间:   1607047 D / FA:记录事件(FE):user_engagement(_e),   Bundle [{firebase_event_origin(_o)= auto,   partnership_time_msec(_et)= 21363,   firebase_screen_class(_sc)= loginActivity,   firebase_screen_id(_si)= 5185910341027462405}] V / FA:onActivityCreated   V / FA:连接尝试已在进行中I / atheer.booklyv:   NativeAlloc并发复制GC已释放25494(1649KB)AllocSpace   对象,19(632KB)LOS对象,50%空闲,3MB / 7MB,总计580us   742.771ms V / FA:正在进行连接尝试V / FA:活动已恢复,时间:1608103 D / FA:记录事件(FE):screen_view(_vs),   Bundle [{firebase_event_origin(_o)= auto,   firebase_previous_class(_pc)=登录活动,   firebase_previous_id(_pi)= 5185910341027462405,   firebase_screen_class(_sc)= dashboardAdmin,   firebase_screen_id(_si)= 5185910341027462406}] D / EGL_emulation:   eglMakeCurrent:0xcc20f240:ver 3 0(tinfo 0xe2730c60)V / FA:   连接尝试已在进行中D / FA:已连接到远程   服务V / FA:处理排队的服务任务:4 W / ActivityThread:   handleWindowVisibility:令牌没有活动   android.os.BinderProxy@7f475a4 V / FA:记录用户参与度,毫秒:   5136 V / FA:活动已暂停,时间:1613235 D / FA:记录事件(FE):   user_engagement(_e),捆绑包[{firebase_event_origin(_o)=自动,   partnership_time_msec(_et)= 5136,   firebase_screen_class(_sc)= dashboardAdmin,   firebase_screen_id(_si)= 5185910341027462406}] V / FA:onActivityCreated   V / FA:恢复活动,时间:1613594 D / FA:记录事件(FE):   screen_view(_vs),捆绑包[{firebase_event_origin(_o)=自动,   firebase_previous_class(_pc)= dashboardAdmin,   firebase_previous_id(_pi)= 5185910341027462406,   firebase_screen_class(_sc)= approvedAdmin,   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.booklyv:长时间等待5.943毫秒   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 0xe2730c60)V / FA:处于不活动状态,与   服务E / StudioProfiler:JVMTI错误:   15(JVMTI_ERROR_THREAD_NOT_ALIVE)I /聊天:   uid = 10086(com.example.atheer.booklyv1)活页夹: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>

1 个答案:

答案 0 :(得分:0)

您需要像下面那样从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"