如何在服务中使用FirebaseListAdapter <string>?

时间:2016-12-11 02:49:33

标签: java android firebase service compiler-errors

我的应用中有一个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>来成功编译和运行我的代码?

请告诉我。

3 个答案:

答案 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