Ich mache eine Android App mit Firebase und das Schreiben von Daten in der Datenbank funktioniert, aber mit dem Lesen der Daten, die ich in der Datenbank schreibe ich bin fest (I Habe nicht viel Erfahrung mit ArrayAdapter, Firebase und nicht mal mit Android).ArrayAdapter liest keine Daten von Firebase (meine App schließt)
Wenn ich dieses Fragment, das Lesen von Firebase enthält, aus dem Telefon öffnen (Hinweis: das Schreiben von Daten ist in einem anderen Fragment), schließt meine App. Nicht sicher, ob es mit - wie ich ArrayAdapter implementieren und verwenden - wie ich Firebase read implementieren - oder die Tatsache, dass ich auf Android Studio (letzte Version SDK 26.0.0) - oder aus einem anderen Grund, dass ich aktualisiert habe nicht sehen.
Ich bekomme ein paar Fehler: - Ich bekomme den Fehler unter dem ich mit Code weiter unten behoben (Konfigurationen.all ...). Dieser Fehler ist aufgetreten, als ich die Abhängigkeiten von Firebase hinzugefügt habe.
Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute meta-data#[email protected] value=(26.0.0) from [com.android.support:design:26.0.0] AndroidManifest.xml:28:13-35
is also present at [com.android.support:cardview-v7:25.4.0] AndroidManifest.xml:25:13-35 value=(25.4.0).
Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:26:9-28:38 to override.
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '25.3.0'
}
}
}
}
- , wenn ich im Debug-Modus laufen und ich passiere nur die inflater.inflate Methode, die ich in meinem Debugger f.mIsNewlyAdded bekommen - nicht lokalen Variable 'f' gefunden (- nicht sicher, ob dies ist normal ?
- manchmal bekomme ich auch einen null-Zeiger Fehler nach der Rückkehr v auf dem oben verbunden sein können
hier ist also mein Code in das Fragment, das die gelesenen Daten zeigen muss:..
public class NewFlinderFragment extends Fragment {
private DatabaseReference mMyFlindersDatabaseReference;
private ChildEventListener mChildEventListener;
private MyFlinderAdapter mMyFlinderAdapter;
private ListView mMyFlinderListView;
private MyFlinder myFlinder;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.new_flinder, container, false);
mMyFlinderListView = (ListView) v.findViewById(R.id.my_flinders_list_view);
//instantiate the reference to MyFlinders in Firebase
mMyFlindersDatabaseReference = MainActivity.mFirebaseDatabase.getReference().child("MyFlinders");
List<MyFlinder> myFlindersList = new ArrayList<>();
mMyFlinderAdapter = new MyFlinderAdapter(getContext(), R.layout.my_flinder, myFlindersList);
MyFlinder myFlinder = new MyFlinder(1,"flinderName",100,1,"Url");
mMyFlinderAdapter.add(myFlinder);
mMyFlinderListView.setAdapter(mMyFlinderAdapter);
mChildEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Toast.makeText(getActivity(), "Boo", Toast.LENGTH_SHORT).show();
Toast.makeText(getActivity(), "difszmfcresg", Toast.LENGTH_SHORT).show();
MyFlinder myFlinder = dataSnapshot.getValue(MyFlinder.class);
mMyFlinderAdapter.add(myFlinder);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
mMyFlindersDatabaseReference.addChildEventListener(mChildEventListener);
return v;
}
}
Die Datenbank initialisierte ich in MainActivity für die gesamte Anwendung (beachten Sie noch einmal, dass das Schreiben in die Datenbank funktioniert und in einem anderen Fragment nicht hier aufgeführt ist).
public class MainActivity extends AppCompatActivity {
public static FirebaseDatabase mFirebaseDatabase;
// variables for authentication with Firebase
public static final int RC_SIGN_IN = 1;
static FirebaseAuth mFirebaseAuth;
static FirebaseAuth.AuthStateListener mAuthStateListener;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFirebaseDatabase = FirebaseDatabase.getInstance();
//instantiate the authentication from Firebase
mFirebaseAuth = FirebaseAuth.getInstance();
.....
Dies ist das aufgeblasene Layout, das die Listenansicht enthält:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="24dp"
android:paddingTop="24dp"
android:text="@string/choose_a_flinder_to_grow"
android:textAlignment="center"
android:textColor="@color/white"
android:textSize="24sp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ListView
android:id="@+id/my_flinders_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@android:color/transparent"
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"
tools:listitem="@layout/my_flinder" />
</LinearLayout>
</LinearLayout>
und dies ist eines der einzelne Teil der Liste (my_flinder):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_flinder_linear_layout"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="24dp"
android:gravity="center">
<ImageView
android:id="@+id/my_flinder_image"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/ic_no_text_white"
android:scaleType="centerInside" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:orientation="vertical">
<TextView
android:id="@+id/my_flinder_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/Blue"
android:paddingStart="18dp"
android:paddingTop="20dp"
android:paddingEnd="6dp"
android:paddingBottom="6dp"
android:textSize="20dp"/>
<TextView
android:id="@+id/my_flinder_points"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:paddingStart="18dp"
android:paddingTop="6dp"
android:paddingEnd="6dp"
android:paddingBottom="6dp"
android:textSize="20dp"/>
</LinearLayout>
<TextView
android:id="@+id/my_flinder_money"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="@color/Pink"
android:paddingStart="20dp"
android:paddingTop="20dp"
android:paddingEnd="6dp"
android:paddingBottom="6dp"
android:textSize="20dp"/>
</LinearLayout>
und dies ist Meine MyFlinderAdapter-Klasse:
public class MyFlinderAdapter extends ArrayAdapter<MyFlinder>{
public MyFlinderAdapter (Context context, int resource, List<MyFlinder> objects){
super(context, resource, objects);
}
@Override
public View getView (int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.my_flinder, parent, false);
}
ImageView myFlinderImage = (ImageView) convertView.findViewById(R.id.my_flinder_image);
TextView myFlinderName = (TextView) convertView.findViewById(R.id.my_flinder_name);
TextView myFlinderPoints = (TextView) convertView.findViewById(R.id.my_flinder_points);
TextView myFlinderMoney = (TextView) convertView.findViewById(R.id.my_flinder_money);
MyFlinder myFlinder = getItem(position);
myFlinderImage.setVisibility(View.VISIBLE);
myFlinderName.setVisibility(View.VISIBLE);
myFlinderPoints.setVisibility(View.VISIBLE);
myFlinderMoney.setVisibility(View.VISIBLE);
myFlinderName.setText(myFlinder.getFlinderName());
myFlinderPoints.setText(myFlinder.getFlinderRequiredPoints());
myFlinderMoney.setText((int) myFlinder.getFlinderMoneyValue());
return convertView;
}
}
Sie sind fantastisch !! Eines meiner zwei größten Probleme ist behoben (war 3 Tage). Jetzt verstehe ich nicht, warum ich nicht von Firebase lesen kann - diese Codezeile stoppt meine Anwendung erneut: MyFlinder myFlinder = dataSnapshot.getValue (MyFlinder.class); – Emma
Ich bin froh zu hören, dass Danke :) –