我正在尝试从Firebase实时读取数据到自定义ArrayAdapter。根据我的研究,看起来FirebaseListAdapter内置了处理这个问题的功能。但是,我无法让我的代码识别FirebaseListAdapter类。如何让FirebaseListAdapter工作?
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.0"
defaultConfig {
applicationId "com.example.quizzingcompanion"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.google.firebase:firebase-database:9.6.0'
compile 'com.google.firebase:firebase-core:9.6.0'
compile 'com.google.firebase:firebase-auth:9.6.0'
compile 'com.android.support:appcompat-v7:24.1.1'
compile 'com.android.support:design:24.1.1'
compile 'com.android.support:support-v4:24.1.1'
compile 'com.firebase:firebase-client-android:2.3.1'
compile 'com.firebaseui:firebase-ui:0.6.0'
compile 'com.firebaseui:firebase-ui-storage:0.6.0'
compile 'com.firebaseui:firebase-ui-database:0.6.0'
}
apply plugin: 'com.google.gms.google-services'
FirebaseListAdapter<Participant> adapter = new FirebaseListAdapter;
Failed to resolve: com.google.firebase:firebase-auth:9.6.0
Failed to resolve: com.google.firebase:firebase-storage:9.6.0
Failed to resolve: com.google.firebase:firebase-database:9.6.0
Failed to resolve: com.google.android.gms:play-services-auth:9.6.0
Cannot resolve symbol FirebaseListAdapter
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import java.util.ArrayList;
/**
* A simple {@link Fragment} subclass.
*/
public class ParticipantFragment extends Fragment {
private DataSource data;
DatabaseReference database;
ArrayList<Participant> participants = new ArrayList<>();
public ParticipantFragment() {
data = new DummyDataSource();
database = FirebaseDatabase.getInstance().getReference();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.content_participants_fragment, container, false);
FirebaseListAdapter<Participant> adapter = new FirebaseListAdapter;
ListView listView = (ListView) rootView.findViewById(R.id.participants_list);
ParticipantAdapter adapter = new ParticipantAdapter(getActivity(), data.getParticipants());
listView.setAdapter(adapter);
FloatingActionButton fab = (FloatingActionButton) rootView.findViewById(R.id.participants_fab);
fab.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(getContext(), NewParticipant.class);
startActivity(intent);
}
});}
import android.app.Activity;
import android.media.Image;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
/**
* Created by Tim on 9/10/2016.
*/
public class ParticipantAdapter extends ArrayAdapter {
public ParticipantAdapter(Activity context, ArrayList<Participant> participant) {
super(context, 0, participant);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View listItemView = convertView;
if(listItemView == null){
listItemView = LayoutInflater.from(getContext()).inflate(R.layout.participants_list_item, parent, false);
}
Participant currentParticipant = (Participant) getItem(position);
ImageView participantImage = (ImageView) listItemView.findViewById(R.id.participant_image);
if(currentParticipant.hasImageValue()){
participantImage.setImageResource(currentParticipant.getImageID());
}else{
participantImage.setImageResource(R.drawable.ic_my_profile);
}
TextView name = (TextView) listItemView.findViewById(R.id.participant_name);
name.setText(currentParticipant.getDisplayName());
ImageView image = (ImageView) listItemView.findViewById(R.id.participant_role);
switch (currentParticipant.getRole()){
case "Official": image.setImageResource(R.drawable.ic_official);
case "Spectator": image.setImageResource(R.drawable.ic_spectator);
case "Quizzer": image.setImageResource(R.mipmap.ic_quizzer);
default: image.setVisibility(View.GONE);
}
return listItemView;
}
}
Button okBtn = (Button) findViewById(R.id.add_participant);
okBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DatabaseReference ref = database.child("participants");
EditText firstName = (EditText) findViewById(R.id.first_name);
EditText lastName = (EditText) findViewById(R.id.last_name);
Participant newParticipant = new Participant(firstName.getText().toString(),
lastName.getText().toString(),
sp.getSelectedItem().toString(),
sp2.getSelectedItem().toString());
Map<String, Object> participantValues = newParticipant.toMap();
ref.push().setValue(participantValues);
}
});
答案 0 :(得分:2)
也许您可以将Firebase依赖项更改为最新版本。
compile 'com.google.firebase:firebase-database:9.6.0'
compile 'com.google.firebase:firebase-core:9.6.0'
compile 'com.google.firebase:firebase-auth:9.6.0'
答案 1 :(得分:2)
FirebaseUI readme有这个方便的compatibility table:
FirebaseUI Firebase/Play
Version Services Version
1.2.0 10.2.0
1.1.1 10.0.0 or 10.0.1
1.0.1 10.0.0 or 10.0.1
1.0.0 9.8.0
0.6.2 9.8.0
0.6.1 9.6.1
0.6.0 9.6.0
0.5.3 9.4.0
0.4.4 9.4.0
0.4.3 9.2.1
0.4.2 9.2.0
0.4.1 9.0.2
0.4.0 9.0.0
因此,要使用FirebaseUI 0.6,您必须使用Firebase / Play Services SDK 9.6。如果您想使用Firebase / Play Services SDK 9.4,则必须使用FirebaseUI 0.5。
此外,您还缺少列表适配器的import语句:
import com.firebase.ui.database.FirebaseListAdapter;
Android Studio应该已经提供了有关此导入的提示。