【问题标题】:Constructor error when using FirebaseListAdapter使用 FirebaseListAdapter 时的构造函数错误
【发布时间】:2016-12-06 21:34:51
【问题描述】:

我正在尝试使用 FirebaseListAdapter 创建一个包含产品名称的 ListView,但出现此错误:

error: no suitable constructor found for
FirebaseListAdapter(MainActivity,Class<String>,int,Firebase) constructor
FirebaseListAdapter.FirebaseListAdapter(Activity,Class<String>,int,Query)
is not applicable

我有最新版本的 Google Play 服务和 Google 存储库,如下图所示:

我的 build.gradle (root) 是:

dependencies {
    classpath 'com.android.tools.build:gradle:2.2.2'
    classpath 'com.google.gms:google-services:3.0.0'
}

而我的 build.gradle (app) 是:

    dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:25.0.1'
    compile 'com.google.firebase:firebase-core:10.0.1'
    compile 'com.google.firebase:firebase-database:10.0.1'
    compile 'com.google.firebase:firebase-auth:10.0.1'
    compile 'com.firebase:firebase-client-android:2.4.0'
    compile 'com.firebaseui:firebase-ui:0.4.1'

}
apply plugin: 'com.google.gms.google-services'

我使用的代码是这样的:

public class MainActivity extends AppCompatActivity {
    Firebase firebase;
    ArrayList<String> arrayList = new ArrayList<>();
    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Firebase.setAndroidContext(this);
    firebase = new Firebase(Config.FIREBASE_URL);
    listView = (ListView) findViewById(R.id.listView);
    }

    @Override
    protected void onStart() {
    super.onStart();

    Firebase products = firebase.child("names");
    FirebaseListAdapter<String> adapter = new FirebaseListAdapter<String>(this, String.class, String.class, android.R.layout.simple_list_item_1, products) {
        @Override
        protected void populateView(View v, String model, int position) {
        //
        }
    };
    }
}

我尝试了所有针对类似问题找到的解决方案,但都没有成功。提前致谢!

【问题讨论】:

    标签: android firebase firebaseui


    【解决方案1】:

    您正在混合新的 SDK:

    compile 'com.google.firebase:firebase-core:10.0.1'
    compile 'com.google.firebase:firebase-database:10.0.1'
    compile 'com.google.firebase:firebase-auth:10.0.1'
    

    使用旧版 SDK:

    compile 'com.firebase:firebase-client-android:2.4.0'
    compile 'com.firebaseui:firebase-ui:0.4.1'
    

    它们不兼容。进行此更改:

    //compile 'com.firebase:firebase-client-android:2.4.0'
    compile 'com.firebaseui:firebase-ui:1.0.1'
    

    并查看Firebase Upgrade Guide 以了解所需的代码更改。

    如果您不需要新 SDK 的功能,那么我想您可以删除这些依赖项并使用旧版 SDK 运行。没试过,不知道会不会遇到其他问题。

    【讨论】:

      【解决方案2】:

      试试这个方法:

      FirebaseListAdapter<String> adapter = new FirebaseListAdapter<String>(this, String.class,  android.R.layout.simple_list_item_1, products) {
          @Override
          protected void populateView(View v, String model) {
          //
          }
      };
      

      FirebaseListAdapter populateView 方法只有两个参数和String.class,是两次。

      【讨论】:

      • 谢谢,但它不起作用。我的错误是:Method does not override method from its superclass。因此,需要三个参数。
      • 你可以看到here我必须两个。
      • FirebaseListAdapter(this, String.class, /*String.class,*/ android.R.layout.simple_list_item_1, products)。我认为必须删除第二个 String.class ;)
      • 如我所见,有三个构造函数: 1. FirebaseListAdapter(Activity activity, java.lang.Class&lt;T&gt; modelClass, int modelLayout, com.firebase.client.Firebase ref) 2. FirebaseListAdapter(Activity activity, java.lang.Class&lt;T&gt; modelClass, int modelLayout, com.firebase.client.Query ref) 每个有 4 个参数。如果删除一个,我有同样的错误。
      • 您是否尝试将 android.R.layout.simple_list_item_1 替换为您自己的布局;)看看this article
      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      • 2012-06-24
      • 2014-01-08
      • 1970-01-01
      • 2020-01-04
      相关资源
      最近更新 更多