Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据从firebase数据库提取到android应用程序时使用progressbar_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

将数据从firebase数据库提取到android应用程序时使用progressbar

将数据从firebase数据库提取到android应用程序时使用progressbar,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我想在屏幕上显示进度条,直到从firebase数据库获取所有必需的数据 如何在fetchMenu()中使用以下代码[在MenuFragment.kt中] .addOnSuccessListener(OnSuccessListener<Void?> { // Write was successful! // ... progressBar.visibility = View.GONE }) .addOnFa

我想在屏幕上显示进度条,直到从firebase数据库获取所有必需的数据

如何在fetchMenu()中使用以下代码[在MenuFragment.kt中]

.addOnSuccessListener(OnSuccessListener<Void?> { // Write was successful!
            // ...
            progressBar.visibility = View.GONE
        })
        .addOnFailureListener(OnFailureListener { // Write failed
            // ...
            progressBar.visibility = View.GONE
        })
.addOnSuccessListener(OnSuccessListener{//写入成功!
// ...
progressBar.visibility=View.GONE
})
.addOnFailureListener(OnFailureListener{//写入失败
// ...
progressBar.visibility=View.GONE
})
MenuFragment.kt

class MenuFragment : Fragment() {

private var dishList: MutableList<DishModel> = mutableListOf()
private lateinit var myRef: DatabaseReference
lateinit var list: RecyclerView
lateinit var proceedToCartLayout: RelativeLayout
lateinit var addToCartBtn: Button
private var selectedCategory = ""
lateinit var progressLayout: RelativeLayout
lateinit var progressBar: ProgressBar

companion object {
    fun newInstance(): Fragment {
        return MenuFragment()
    }
}

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val view = inflater.inflate(R.layout.fragment_menu, container, false)
    //retrieve id
    val bundle = this.arguments
    selectedCategory = bundle!!.getString("CATEGORY_ID")!!
    list = view.findViewById(R.id.recyclerMenu)
    myRef = FirebaseDatabase.getInstance().getReference("Category")
    proceedToCartLayout = view.findViewById(R.id.ProceedToCart)
    addToCartBtn = view.findViewById(R.id.btn_cart)
    progressLayout = view.findViewById(R.id.progressLayout)
    progressBar = view.findViewById(R.id.progressBar)


    return view
}


override fun onResume() {

    if (ConnectionManager().checkConnectivity(activity as Context)) {
        fetchMenu()

    } else {

        val alterDialog = androidx.appcompat.app.AlertDialog.Builder(activity as 
Context)
        alterDialog.setTitle("No Internet")
        alterDialog.setMessage("Connect to internet to continue")
        alterDialog.setIcon(R.drawable.nointernet)
        alterDialog.setPositiveButton("Open Settings") { _, _ ->
            val settingsIntent = Intent(Settings.ACTION_SETTINGS)//open wifi settings
            startActivity(settingsIntent)
        }

        alterDialog.setNegativeButton("Exit") { _, _ ->
            ActivityCompat.finishAffinity(activity as Activity)
        }
        alterDialog.setCancelable(false)

        alterDialog.create()
        alterDialog.show()

    }

    super.onResume()
}

private fun fetchMenu() {


    progressLayout.visibility = View.VISIBLE

    myRef.child(selectedCategory)
        .addValueEventListener(object : ValueEventListener {
            override fun onCancelled(p0: DatabaseError) {
                progressLayout.visibility = View.GONE
                Toast.makeText(context, "$p0", Toast.LENGTH_SHORT).show()
            }


            override fun onDataChange(p0: DataSnapshot) {
                progressLayout.visibility = View.GONE
                if (p0.exists()) {
                    dishList.clear()
                    for (i in p0.children) {
                        val plan = i.getValue(DishModel::class.java)
                        dishList.add(plan!!)
                    }

                    val adapter = MenuAdapter(
                        context!!,
                        R.layout.menu_list_item,
                        dishList,
                        proceedToCartLayout,
                        addToCartBtn, selectedCategory
                    )
                    list.adapter = adapter

                }
            }


        })
}


}
class MenuFragment:Fragment(){
私有变量dishList:MutableList=mutableListOf()
私有lateinit var myRef:DatabaseReference
lateinit变量列表:RecyclerView
lateinit var proceedToCartLayout:RelativeLayout
lateinit var addToCartBtn:按钮
private var selectedCategory=“”
lateinit变量progressLayout:RelativeLayout
lateinit变量progressBar:progressBar
伴星{
fun newInstance():片段{
返回菜单片段()
}
}
覆盖创建视图(
充气器:布局充气器,容器:视图组?,
savedInstanceState:捆绑?
):查看{
val视图=充气机。充气(R.layout.fragment_菜单,容器,错误)
//检索id
val bundle=this.arguments
selectedCategory=bundle!!.getString(“CATEGORY\u ID”)!!
列表=view.findviewbyd(R.id.recyclerMenu)
myRef=FirebaseDatabase.getInstance().getReference(“类别”)
proceedToCartLayout=view.findViewById(R.id.ProceedToCart)
addToCartBtn=view.findViewById(R.id.btn\u购物车)
progressLayout=view.findViewById(R.id.progressLayout)
progressBar=view.findViewById(R.id.progressBar)
返回视图
}
重写onResume(){
if(ConnectionManager().checkConnectivity(活动作为上下文)){
fetchMenu()
}否则{
val alterDialog=androidx.appcompat.app.AlertDialog.Builder(活动为
(上下文)
alterDialog.setTitle(“无互联网”)
alterDialog.setMessage(“连接到internet以继续”)
alterDialog.setIcon(R.drawable.nointernet)
alterDialog.setPositiveButton(“打开设置”){{},{->
val settingsinent=Intent(Settings.ACTION\u Settings)//打开wifi设置
启动触觉(设置输入)
}
alterDialog.setNegativeButton(“退出”){{},{->
活动公司有限性(活动作为活动)
}
alterDialog.setCancelable(false)
alterDialog.create()
alterDialog.show()
}
super.onResume()
}
私人菜单(){
progressLayout.visibility=View.VISIBLE
myRef.子项(选定类别)
.addValueEventListener(对象:ValueEventListener{
已取消覆盖乐趣(p0:DatabaseError){
progressLayout.visibility=View.GONE
Toast.makeText(上下文“$p0”,Toast.LENGTH\u SHORT.show())
}
覆盖数据更改(p0:DataSnapshot){
progressLayout.visibility=View.GONE
if(p0.exists()){
dishList.clear()
用于(p0.儿童中的i){
val plan=i.getValue(DishModel::class.java)
dishList.add(计划!!)
}
val适配器=菜单适配器(
上下文
R.layout.menu\u list\u项,
餐具清单,
工艺流程图,
addToCartBtn,selectedCategory
)
list.adapter=适配器
}
}
})
}
}
我在使用进度条后得到了结果,但没有得到所需的结果,因为我想显示进度条,直到RecyclerView的所有行都被从firebase数据库获取的数据填充,并且所有视图都正确放置

我在使用进度条时得到了这个


根据您的共享图像,您根本没有显示“进度条”。要解决此问题,请取消注释以下代码行:

progressLayout.visibility = View.VISIBLE
并添加以下行:

progressLayout.visibility = View.GONE

在“onDataChange()”方法中也是如此。这样,当调用“fetchMenu()”方法时,您将开始显示ProgressBar,一旦收到响应,您可以隐藏数据或异常。

请编辑您的问题,并将代码添加为文本,而不是图像。当未获得所需结果时,我对progressLayout的可见性进行了注释。我正在考虑使用“addOnSuccessListener”。我早就照你说的做了,也得到了结果,但没有得到我想要的结果。我想显示进度条,直到列表的所有行(在RecyclerView中)都充满了从firebase数据库获取的数据(包括一些图像)。如何在布局(XML)文件中定义progressLayout?嘿,Anju!我能帮你了解其他信息吗?如果你认为我的答案对你有帮助,请考虑通过点击复选来接受它。✔️) 在投票箭头下方的左侧。应该将颜色更改为绿色。我非常感谢。谢谢!