Android Studio无法解析FirebaseRecyclerOptions符号求助
问题
我正在用Firebase开发一款支出管理器,Android Studio 2021.3已成功连接并正确配置Firebase实时数据库,且build.gradle依赖已同步完成,但仍无法解析FirebaseRecyclerOptions<>符号,恳请技术帮助。
相关代码
BudgetActivity.java
package com.example.budgetingapp; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.app.ProgressDialog; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import org.joda.time.DateTime; import org.joda.time.Months; import org.joda.time.MutableDateTime; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.zip.DataFormatException; public class BudgetActivity extends AppCompatActivity { private TextView totalBudgetAmountTextView; private RecyclerView recyclerView; private FloatingActionButton fab; private DatabaseReference budgetRef; private FirebaseAuth mAuth; private ProgressDialog loader; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_budget); mAuth = FirebaseAuth.getInstance(); budgetRef = FirebaseDatabase.getInstance().getReference().child("budget").child(mAuth.getCurrentUser().getUid()); loader = new ProgressDialog(this); totalBudgetAmountTextView = findViewById(R.id.totalBudgetAmountTextView); recyclerView = findViewById(R.id.recyclerView); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setStackFromEnd(true); linearLayoutManager.setReverseLayout(true); recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(linearLayoutManager); fab = findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { additem(); } }); } private void additem() { AlertDialog.Builder myDialog = new AlertDialog.Builder(this); LayoutInflater inflater = LayoutInflater.from(this); View myView = inflater.inflate(R.layout.input_layout,null); myDialog.setView(myView); final AlertDialog dialog = myDialog.create(); dialog.setCancelable(false); final Spinner itemSpinner = myView.findViewById(R.id.itemSpinner); final EditText amount = myView.findViewById(R.id.amount); final Button cancel = myView.findViewById(R.id.cancel); final Button save = myView.findViewById(R.id.save); save.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String budgetAmount = amount.getText().toString(); String budgetItem = itemSpinner.getSelectedItem().toString(); if(TextUtils.isEmpty(budgetAmount)){ amount.setError("Amount is required!"); return; } if(budgetItem.equals("Select Item")){ Toast.makeText(BudgetActivity.this, "Select a valid item", Toast.LENGTH_SHORT).show(); }else{ loader.setMessage("adding a budget item"); loader.setCanceledOnTouchOutside(false); loader.show(); String id = budgetRef.push().getKey(); DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); Calendar cal = Calendar.getInstance(); String date = dateFormat.format(cal.getTime()); MutableDateTime epoch= new MutableDateTime(); epoch.setDate(0); DateTime now = new DateTime(); Months months = Months.monthsBetween(epoch,now); Data data = new Data(budgetItem,date,id,null,Integer.parseInt(budgetAmount),months.getMonths()); budgetRef.child(id).setValue(data).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if(task.isSuccessful()){ Toast.makeText(BudgetActivity.this, "Budget item added successfully.", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(BudgetActivity.this, task.getException().toString(), Toast.LENGTH_SHORT).show(); } loader.dismiss(); } }); } dialog.dismiss(); } }); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); dialog.show(); } @Override protected void onStart() { super.onStart(); FirebaseRecyclerOptions<Data> options = new FirebaseRecyclerOptions.Builder<Data>() .setQuery(budgetRef, Data.class) .build(); } }
build.gradle(模块级)
dependencies { implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'com.google.android.material:material:1.7.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'com.google.firebase:firebase-auth:21.1.0' implementation 'com.google.firebase:firebase-database:20.1.0' implementation 'com.google.android.material:material:1.7.0' implementation 'androidx.cardview:cardview:1.0.0' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.4' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0' implementation platform('com.google.firebase:firebase-bom:31.1.1') implementation 'com.google.firebase:firebase-analytics' implementation 'joda-time:joda-time:2.10.6' implementation 'com.firebaseui:firebase-ui-database:6.4.0' }
解决方案
1. 补充缺失的导入语句
FirebaseRecyclerOptions属于FirebaseUI库,你的代码中未导入该类,需在文件顶部添加:
import com.firebase.ui.database.FirebaseRecyclerOptions;
2. 修复依赖版本兼容性问题
你使用的Firebase BOM版本是31.1.1,但FirebaseUI 6.4.0仅适配到Firebase BOM 28.x系列,版本不匹配会导致类无法被识别。建议将FirebaseUI依赖更新为适配BOM 31.x的版本:
implementation 'com.firebaseui:firebase-ui-database:8.0.2'
(FirebaseUI 8.x系列完全兼容Firebase BOM 30+版本)
3. 清理并重建项目
- 点击Android Studio顶部菜单栏
Build→Clean Project - 完成后点击
Build→Rebuild Project - 同步Gradle文件(点击右上角的「Sync Project with Gradle Files」按钮)
4. 清除Android Studio缓存(若上述步骤无效)
点击 File → Invalidate Caches...,选择「Invalidate and Restart」,重启后重新同步项目。
内容的提问来源于stack exchange,提问作者Aman Dhuliya
相关产品推荐
相关产品推荐

