使用FirebaseRecyclerAdapter填充自定义回收站视图时“Firebase API初始化失败”

时间:2016-11-13 21:37:54

标签: android firebase android-recyclerview firebase-realtime-database

我尝试填充在firebase控制台上托管的一组字符串,但我无法从firebaseRecyclerAdapter

的自定义回收站视图填充它

以下是我的代码:

public class Hit extends AppCompatActivity {

private DatabaseReference mDatabaseReference;

RecyclerView mRecyclerView;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.act);
    setSupportActionBar((Toolbar)findViewById(R.id.toolbar));

    mDatabaseReference = FirebaseDatabase.getInstance().getReferenceFromUrl("https://xxxx.firebaseio.com/eak");
    mRecyclerView=(RecyclerView)findViewById(R.id.recycleView);
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

}

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

    FirebaseRecyclerAdapter<Bobby, MessageViewHolder> adapter= new FirebaseRecyclerAdapter<Bobby, MessageViewHolder>(

            Bobby.class,
            R.layout.Bobby_array_design,
            MessageViewHolder.class,
            mDatabaseReference
    )
    {
        @Override
        protected void populateViewHolder(MessageViewHolder viewHolder, Bobby model, int position) {

            viewHolder.mText.setText(model.getName());
            viewHolder.nText.setText(model.getCompany());
            viewHolder.oText.setText(model.getLocation());
            viewHolder.pText.setText(model.getDate());

        }
    };
    mRecyclerView.setAdapter(adapter);
}
public static class MessageViewHolder extends RecyclerView.ViewHolder{
    static TextView mText,nText,oText,pText;


    public MessageViewHolder(View v) {
        super(v);
        mText=(TextView)v.findViewById(R.id.BobType);
        nText = (TextView) v.findViewById(R.id.Company);
        oText = (TextView) v.findViewById(R.id.Location);
        pText=(TextView)v.findViewById(R.id.BobDate);

    }

}

Bobby.class

public class Bobby {

    private String name;
    private String company;
    private String location;
    private String date;

    public Bobby(String name, String company, String location, String date) {
        this.name = name;
        this.company = company;
        this.location = location;
        this.date = date;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public Bobby(){

    }
}

查看数据库安排的图片

View the picture of the database arrangement

数据库安排如下:

eak
 - name: "Bob"
 - company:"App Shot"
-location: "Canada"
 - date:"Today"

当我尝试加载应用程序时出现崩溃错误:

A/FirebaseApp: Firebase API initialization failure.
A/FirebaseApp: Firebase API initialization failure.
 java.lang.reflect.InvocationTargetException
     at java.lang.reflect.Method.invoke(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:372)
     at com.google.firebase.FirebaseApp.zza(Unknown Source)
     at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
     at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
     at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
     at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source)
     at android.content.ContentProvider.attachInfo(ContentProvider.java:1739)
     at android.content.ContentProvider.attachInfo(ContentProvider.java:1708)
     at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
     at android.app.ActivityThread.installProvider(ActivityThread.java:5223)
     at android.app.ActivityThread.installContentProviders(ActivityThread.java:4797)
     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4737)
     at android.app.ActivityThread.access$1500(ActivityThread.java:167)
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478)
     at android.os.Handler.dispatchMessage(Handler.java:111)
     at android.os.Looper.loop(Looper.java:194)
     at android.app.ActivityThread.main(ActivityThread.java:5537)
     at java.lang.reflect.Method.invoke(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:372)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751)
  Caused by: java.lang.NoSuchMethodError: No static method zzy(Ljava/lang/Object;)Ljava/lang/Object; in class Lcom/google/android/gms/common/internal/zzab; or its super classes (declaration of 'com.google.android.gms.common.internal.zzab' appears in /data/data/job.nigerian.com.job/files/instant-run/dex/slice-com.google.android.gms-play-services-base-9.8.0_610e4916e870c98cde0adf015eb4f2c0f4a671b1-classes.dex)
     at com.google.android.gms.measurement.internal.zzx.zzdo(Unknown Source)
     at com.google.android.gms.measurement.AppMeasurement.getInstance(Unknown Source)
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.google.firebase.FirebaseApp.zza(Unknown Source) 
     at com.google.firebase.FirebaseApp.initializeApp(Unknown Source) 
     at com.google.firebase.FirebaseApp.initializeApp(Unknown Source) 
     at com.google.firebase.FirebaseApp.initializeApp(Unknown Source) 
     at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source) 
     at android.content.ContentProvider.attachInfo(ContentProvider.java:1739) 
     at android.content.ContentProvider.attachInfo(ContentProvider.java:1708) 
     at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source) 
     at android.app.ActivityThread.installProvider(ActivityThread.java:5223) 
     at android.app.ActivityThread.installContentProviders(ActivityThread.java:4797) 
     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4737) 
     at android.app.ActivityThread.access$1500(ActivityThread.java:167) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478) 
     at android.os.Handler.dispatchMessage(Handler.java:111) 
     at android.os.Looper.loop(Looper.java:194) 
     at android.app.ActivityThread.main(ActivityThread.java:5537) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751) 

拜托,我想知道如何才能做到这一点。感谢。

这是(Module:app)build.gradle

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
    applicationId "xx.xx.xom.Bobby"
    minSdkVersion 16
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

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'
})
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.google.firebase:firebase-database:9.4.0'
testCompile 'junit:junit:4.12'
compile 'com.firebaseui:firebase-ui:0.6.2'
compile 'com.android.support:recyclerview-v7:23.0.0'
}


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

在有用的建议后我升级了我的支持库但我现在得到了另一个错误(2)

 E/AndroidRuntime: FATAL EXCEPTION: main
                                                    Process: re.com, PID: 16436
                                                    com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type re.com.Bob
                                                        at com.google.android.gms.internal.zzanp.zze(Unknown Source)
                                                        at com.google.android.gms.internal.zzanp.zzb(Unknown Source)
                                                        at com.google.android.gms.internal.zzanp.zza(Unknown Source)
                                                        at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
                                                        at com.firebase.ui.database.FirebaseRecyclerAdapter.parseSnapshot(FirebaseRecyclerAdapter.java:151)
                                                        at com.firebase.ui.database.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:140)
                                                        at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:183)
                                                        at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6062)
                                                        at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6095)
                                                        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5277)
                                                        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5153)
                                                        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2061)
                                                        at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1445)
                                                        at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1408)
                                                        at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:580)
                                                        at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3374)
                                                        at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3183)
                                                        at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1593)
                                                        at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:323)
                                                        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:800)
                                                        at android.view.Choreographer.doCallbacks(Choreographer.java:603)
                                                        at android.view.Choreographer.doFrame(Choreographer.java:571)
                                                        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:786)
                                                        at android.os.Handler.handleCallback(Handler.java:815)
                                                        at android.os.Handler.dispatchMessage(Handler.java:104)
                                                        at android.os.Looper.loop(Looper.java:194)
                                                        at android.app.ActivityThread.main(ActivityThread.java:5537)
                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                        at java.lang.reflect.Method.invoke(Method.java:372)
                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956)
                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751)

你一直很有帮助,但我还是新手,我需要你的帮助来解决这个错误。

1 个答案:

答案 0 :(得分:0)

您的数据库结构不正确。在您发布的结构中,eak的子项是单个Bobby的字符串字段:公司,日期,位置,名称。您需要eak的子项成为Bobby的实例。您可以使用以下代码创建所需的结构:

Bobby bobby = new Bobby("Ryoichi Kikuchi", "Hughes", "Malibu", "15 Dec 1961");
mDatabaseReference.push().setValue(bobby);