我尝试填充在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(){
}
}
查看数据库安排的图片
数据库安排如下:
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)
你一直很有帮助,但我还是新手,我需要你的帮助来解决这个错误。
答案 0 :(得分:0)
您的数据库结构不正确。在您发布的结构中,eak
的子项是单个Bobby
的字符串字段:公司,日期,位置,名称。您需要eak
的子项成为Bobby
的实例。您可以使用以下代码创建所需的结构:
Bobby bobby = new Bobby("Ryoichi Kikuchi", "Hughes", "Malibu", "15 Dec 1961");
mDatabaseReference.push().setValue(bobby);