我的应用中有一个Service
课程,我必须在其中使用FirebaseListAdapter<String>
。
此处有MyService.java
个文件:
public class MyService extends Service {
DatabaseReference firebaseDatabaseRef;
String followedBy;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
firebaseDatabaseRef = FirebaseDatabase.getInstance().getReferenceFromUrl("https://***-***.firebaseio.com/");
Toast.makeText(getBaseContext(), "Service started", Toast.LENGTH_SHORT).show();
FirebaseListAdapter<String> adapter = new FirebaseListAdapter<String>(this,
String.class, android.R.layout.simple_expandable_list_item_1, firebaseDatabaseRef) {
@Override
protected void populateView(View v, String model, int position) {
followedBy = model.substring(30);
}
};
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(getBaseContext(), "Service stopped", Toast.LENGTH_SHORT).show();
}
}
但它无法编译,因为我收到此错误:
Error:(133, 47) error: no suitable constructor found for FirebaseListAdapter(MyService,Class<String>,int,DatabaseReference)
constructor FirebaseListAdapter.FirebaseListAdapter(Activity,Class<String>,int,Query) is not applicable
(argument mismatch; MyService cannot be converted to Activity)
constructor FirebaseListAdapter.FirebaseListAdapter(Activity,Class<String>,int,DatabaseReference) is not applicable
(argument mismatch; MyService cannot be converted to Activity)
我应该在this
中代替FirebaseListAdapter<String>
来成功编译和运行我的代码?
请告诉我。
答案 0 :(得分:1)
活动是提供用户界面的应用程序组件。 Service的文档解释了:
服务是一个可以执行长时间运行的应用程序组件 在后台运行,它不提供用户 接口
FirebaseListAdapter支持显示Firebase数据库中的数据。它用于Activity
。它不能用于Service
。无需在Service
中使用它,因为服务没有用户界面(可选通知除外)。
答案 1 :(得分:0)
请提供您的Firebase初始化和查询参考。
您是否在片段中使用FirebaseListAdapter?
this
指的是活动的背景。如果您在片段内部使用FirebaseListAdapter
,请使用getActivity()
代替this
请检查我使用的以下代码。在这里,我已经在Activity中初始化了FirebaseListAdapter。
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users");
Query qRef = ref.orderByChild("username");
FirebaseListAdapter<User> firebaseAdapter = new FirebaseListAdapter<User>(this,User.class,R.layout.list_item,qRef) {
@Override
protected void populateView(View v, User model, int position) {
Log.i("MainAct","Populating View");
TextView textView = (TextView) v.findViewById(R.id.list_item_text);
textView.setText(model.getUsername());
}
};
答案 2 :(得分:0)
看起来FirebaseRecyclerAdapter
不需要上下文来初始化,所以你应该可以这样做:
FirebaseListAdapter<String> adapter = new FirebaseListAdapter<String>(
String.class, android.R.layout.simple_expandable_list_item_1, firebaseDatabaseRef) {
...
请参阅the code。