2016-05-20 11 views
0

Ich fing an, Fragmente zu benutzen, da ich mich mit Aktivitäten vertraut gemacht habe und ich möchte die Dinge auf ein anderes Level bringen. Was ich bisher gelernt habe, ist die Weitergabe von Daten zwischen Fragmenten. Nun möchte ich versuchen, etwas zu tun, das Datenbanken enthält.Wie füllt man Listenansicht mit Datenbankdaten in einem Fragment?

Dies ist nur ein Beispiel App, die mir zeigen, wie man mit dieser Art von Sachen umzugehen.

Also im Grunde habe ich ein Fragment zum Hinzufügen von Kontakten und ein zweites Fragment, um den Vornamen des Kontakts in einer Listenansicht zu zeigen. Ich füge die Kontakte in eine Datenbank ein und dieser Teil funktioniert gut. Aber wenn ich versuche, die Daten aus einer Datenbank in einem Fragment zu zeigen, das eine Listenansicht enthält, stürzt meine App ab. Hier

ist der Code:

public class MainActivity extends AppCompatActivity implements Contacts_Add.sendData { 

DatabaseHandler handler; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    handler = new DatabaseHandler(this, null, null, 1); 

    //____________________________PRINT DATABASE_____________________ 

    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.fragment_container, new Contacts_All(), "allFrag"); 
    fragmentTransaction.commit(); 

    getSupportFragmentManager().executePendingTransactions(); 

    Contacts_All fragAll = (Contacts_All) getSupportFragmentManager().findFragmentByTag("allFrag"); 
    fragAll.printDatabase(); 

    //______________________________________________________________________ 

//etValues method is outside of onCreate I just didnt put the whole code. 

    @Override 
public void etValues(String fname, String lname, String phone, String email) { 

    ContactsObjects contact = new ContactsObjects(fname, lname, phone, email); 

    handler.insertContact(contact); 

    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.fragment_container, new Contacts_All(), "allFrag"); 
    fragmentTransaction.commit(); 

    getSupportFragmentManager().executePendingTransactions(); 

    Contacts_All fragAll = (Contacts_All) getSupportFragmentManager().findFragmentByTag("allFrag"); 
    fragAll.printDatabase(); 


} 

Alle Kontakte Fragment:

public class Contacts_All extends ListFragment { 


DatabaseHandler handler; 

public Contacts_All() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.contacts_all, container, false); 


    return view; 
} 

public void printDatabase() { 

    List<ContactsObjects> contactsList = handler.getAllContacts(); 
    ArrayList<ContactsObjects> newContactsList = new ArrayList<ContactsObjects>(); 
    for (ContactsObjects cn : contactsList) { 

     newContactsList.add(cn); 

    } 

    ListAdapter la = new ArrayAdapter<ContactsObjects>(getActivity(), android.R.layout.simple_list_item_1, newContactsList); 

    setListAdapter(la); 


} 


} 

DatabaseHandler:

public List<ContactsObjects> getAllContacts() { 
    List<ContactsObjects> contactList = new ArrayList<ContactsObjects>(); 

    String selectQuery = "SELECT * FROM " + TABLE_CONTACTS; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 


    if (cursor.moveToFirst()) { 
     do { 
      ContactsObjects contact = new ContactsObjects(); 
      contact.set_id(Integer.parseInt(cursor.getString(cursor.getColumnIndex("_id")))); 
      contact.setFirstName(cursor.getString(cursor.getColumnIndex("firstname"))); 
      contact.setLastName(cursor.getString(cursor.getColumnIndex("lastname"))); 
      contact.setPhoneNumber(cursor.getString(cursor.getColumnIndex("phonenumber"))); 
      contact.setEmail(cursor.getString(cursor.getColumnIndex("email"))); 

      contactList.add(contact); 
     } while (cursor.moveToNext()); 
    } 


    return contactList; 
} 

logcat Fehler: erste Fehler ist in dieser Zeile:

List<ContactsObjects> contactsList = handler.getAllContacts(); 

zweite Fehler ist in dieser Zeile:

fragAll.printDatabase(); //in onCreate 

logcat

+0

Ihre Handler (Datenbank) nie in Print-Datenbank-Methode eines ListFragment initialisiert –

+0

können Sie Ihre Antwort mit dem Code, den ich vermisse? – Nenco

Antwort

0

In printDatabase() -Methode eines listfragment (Contacts_All Klasse) Handler nie initialisiert wird .. Sie vermissen diese Zeile:

handler = new DatabaseHandler(this, null, null, 1); 
+0

es funktioniert jetzt. Danke, Mann. Ich werde Ihre Antwort in 2 Minuten akzeptieren, da es sagt, dass ich nicht atm – Nenco

+0

froh bin, dass es funktioniert, sicher :) –

Verwandte Themen