无法解析FirebaseListAdapter(Android)的构造函数

无法解析FirebaseListAdapter(Android)的构造函数,android,firebase,firebase-realtime-database,firebaseui,Android,Firebase,Firebase Realtime Database,Firebaseui,我将尝试遵循以下教程: 在14:00分左右,您将看到引入了以下代码: FirebaseListAdapter<String> adapter = new FirebaseListAdapter<String>(this, String.class, android.R.layout.simple_list_item_1, messagesRef) { protected void populateView(View v,

我将尝试遵循以下教程:

在14:00分左右,您将看到引入了以下代码:

    FirebaseListAdapter<String> adapter = new FirebaseListAdapter<String>(this,
            String.class, android.R.layout.simple_list_item_1, messagesRef) {

        protected void populateView(View v, String model, int position) {
            TextView textView = (TextView) findViewById(android.R.id.text1);
            textView.setText(model);
        }
    };
FirebaseListAdapter=新的FirebaseListAdapter(此,
String.class,android.R.layout.simple\u list\u item\u 1,messagesRef){
受保护的void populateView(视图v、字符串模型、int位置){
TextView TextView=(TextView)findViewById(android.R.id.text1);
setText(model);
}
};
然而,我的Android Studio用红色标出了构造函数参数,当我将鼠标悬停在带下划线的区域上时,会弹出一条消息,说“无法解析构造函数”[我的构造函数的详细抽象描述w/params]”。我希望我能剪切并粘贴它所说的内容,但我找不到任何方法

无论如何……在我的无限知识中,我检查了底层(导入的)类FirebaseListAdapter.java(以防自视频制作以来对构造函数要求进行了某种更改),我看不出我的构造函数(它不是真正的“我的”构造函数——它是视频中的一个)不工作的原因

谢谢你的帮助

PS-我知道有人会要求更多的代码,所以这里是整个主要活动:

package com.testing123.firecast2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.firebase.client.ChildEventListener;
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ValueEventListener;
import com.firebase.ui.database.FirebaseListAdapter;
import java.util.ArrayList;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

ArrayAdapter<String> adapter;

static final String TAG = "FireBase2";

// Firebase

Firebase mRootRef;
Firebase messagesRef;

// ArrayList<String> mMessages = new ArrayList<>();

// UI

TextView mTextView;
ListView mListView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mRootRef = new Firebase ("https://firecast002.firebaseio.com/");

    mTextView = (TextView) findViewById(R.id.textView);
    mListView = (ListView) findViewById(R.id.listView);

}


@Override
protected void onStart() {
    super.onStart();
    messagesRef = mRootRef.child("messages");

    // adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mMessages);
    FirebaseListAdapter<String> adapter = new FirebaseListAdapter<String>(this,
            String.class, android.R.layout.simple_list_item_1, messagesRef) {

        protected void populateView(View v, String model, int position) {
            TextView textView = (TextView) findViewById(android.R.id.text1);
            textView.setText(model);
        }
    };



    mListView.setAdapter(adapter);

    /* messagesRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            // String message = dataSnapshot.getValue(String.class);

            // mTextView.setText(message);

            // that was how its done for single key value pair... but now we're doing multiple children under "message"

            Map<String,String> map = dataSnapshot.getValue(Map.class);
            String message1 = map.get("message1");
            String message2 = map.get("message2");

        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
        }
    });  */

    // that was how its done for valuevent listener... now we treat the children of "message" key as list items
    // and use a childeventlistener instead

    /* messagesRef.addChildEventListener(new ChildEventListener() {
        @Override
        // gets fired for every INITIAL child member.
        // only gets sent a string, not a downstream dataset
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            String message = dataSnapshot.getValue(String.class);
            Log.i(TAG, "child added: " + message + " ... and by the way, String 's' is" + s);
            mMessages.add(message);
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            String message = dataSnapshot.getValue(String.class);
            Log.i(TAG, "child changed: " + message + " ... and by the way, String 's' is" + s);
        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

            String message = dataSnapshot.getValue(String.class);
            Log.i(TAG, "child removed: " + message);
        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
        }
    });
    */
    // that was the hard way, now we use FirebaseUI





}
}
package com.testing123.firecast2;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
导入com.firebase.client.ChildEventListener;
导入com.firebase.client.DataSnapshot;
导入com.firebase.client.firebase;
导入com.firebase.client.firebase错误;
导入com.firebase.client.ValueEventListener;
导入com.firebase.ui.database.FirebaseListAdapter;
导入java.util.ArrayList;
导入java.util.Map;
公共类MainActivity扩展了AppCompatActivity{
阵列适配器;
静态最终字符串TAG=“FireBase2”;
//火基
Firebase mRootRef;
Firebase消息SREF;
//ArrayList mMessages=新的ArrayList();
//用户界面
文本视图mTextView;
列表视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRootRef=新的火力基地(“https://firecast002.firebaseio.com/");
mTextView=(TextView)findViewById(R.id.TextView);
mListView=(ListView)findViewById(R.id.ListView);
}
@凌驾
受保护的void onStart(){
super.onStart();
messagesRef=mRootRef.child(“消息”);
//adapter=new ArrayAdapter(这是android.R.layout.simple_list_item_1,mMessages);
FirebaseListAdapter=新的FirebaseListAdapter(此,
String.class,android.R.layout.simple\u list\u item\u 1,messagesRef){
受保护的void populateView(视图v、字符串模型、int位置){
TextView TextView=(TextView)findViewById(android.R.id.text1);
setText(model);
}
};
mListView.setAdapter(适配器);
/*messagesRef.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
//String message=dataSnapshot.getValue(String.class);
//mTextView.setText(消息);
//这就是对单个键值对的处理方式……但现在我们在“消息”下处理多个子项
Map Map=dataSnapshot.getValue(Map.class);
字符串message1=map.get(“message1”);
字符串message2=map.get(“message2”);
}
@凌驾
取消后的公共无效(FirebaseError FirebaseError){
}
});  */
//ValueEvent listener就是这样做的……现在我们将“message”键的子项视为列表项
//并改用childeventlistener
/*messagesRef.addChildEventListener(新的ChildEventListener(){
@凌驾
//为每个初始子成员激发。
//只发送字符串,而不是下游数据集
公共void onChildAdded(DataSnapshot DataSnapshot,字符串s){
String message=dataSnapshot.getValue(String.class);
i(标签,“child添加:“+message+”…顺便说一下,字符串“s”是“+s”);
添加(消息);
adapter.notifyDataSetChanged();
}
@凌驾
公共void onChildChanged(DataSnapshot DataSnapshot,字符串s){
String message=dataSnapshot.getValue(String.class);
i(标记“child changed:“+message+”…顺便说一下,字符串“s”是“+s”);
}
@凌驾
ChildRemoved上的公共void(DataSnapshot DataSnapshot){
String message=dataSnapshot.getValue(String.class);
Log.i(标记“已移除的子项:”+消息);
}
@凌驾
已移动ChildMoved上的公共void(DataSnapshot DataSnapshot,字符串s){
}
@凌驾
取消后的公共无效(FirebaseError FirebaseError){
}
});
*/
//这是一条艰难的道路,现在我们使用FirebaseUI
}
}

更新项目以添加最新版本的firebase UI


“com.firebaseui:firebaseui:0.4.3”

我也有同样的错误。经过多次尝试,我想我找到了解决方案

  • 首先,将此库添加到依赖项:

    实现'com.firebaseui:firebaseui:0.6.2'

  • 接下来,将此导入复制并粘贴到活动导入:

    导入com.firebase.ui.database.FirebaseListAdapter;


  • 一切似乎都是合法的。我访问了它的可用构造函数,似乎你得到了它。你是否尝试用谷歌搜索你的错误以查看是否有人有错误?你是否在你的Dependencies gradle文件编译'com.firebaseui:firebaseui:0:3.1'中添加了firebase ui?你能分享你得到的错误吗?我建议你不要这样做