2017-07-29 4 views
-1

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; 
    } 
} 

Antwort

1

myFlinderMoney.setText((int) myFlinder.getFlinderMoneyValue());
Dieses Snippet verursacht möglicherweise ein Problem. Da Sie int bereitstellen, setzt die setText-Methode voraus, dass int, die Sie angegeben haben, eine Ressourcen-ID ist. Es sucht also nach dieser Ressource, kann sie aber nicht finden. Du solltest String dort hineinlegen. Daher gibt es den folgenden Fehler:

07-29 14:27:42.552 4631 4631 E AndroidRuntime: android.content.res.Resources$NotFoundException: String resource ID #0x64

Hoffe, dass hilft!

+0

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

+0

Ich bin froh zu hören, dass Danke :) –

Verwandte Themen