I am trying to read data in real time from Firebase into a custom ArrayAdapter. From my research, it looks like FirebaseListAdapter has built in functionality to handle this. However, I am unable to get my code to recognize the FirebaseListAdapter class. How do I get the FirebaseListAdapter to work?
Gradle File
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'
FirebaseAdapter Initialization
FirebaseListAdapter<Participant> adapter = new FirebaseListAdapter;
Error Messages
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
Fragment with List
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);
}
});}
Custom Adapter
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;
}
}
Where Values are Added
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);
}
});
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…