2016-05-20 11 views
0

私はアクティビティの使用に慣れてから別のレベルに物事を持ちたいので、フラグメントを使い始めました。今まで私が学んだことは断片間でデータを渡すことであり、今はデータベースを含む何かをしようとしています。フラグメント内のデータベースデータをlistviewに取り込む方法は?

これは、この種のものに対処する方法を私に示す、単なるサンプルアプリケーションです。

基本的に私は連絡先を追加するための断片と、リストビュー内の連絡先のファーストネームを示す第2の断片を持っています。私はデータベースに連絡先を追加しており、その部分は正常に動作します。しかし、リストビューを含むフラグメント内のデータベースからデータを表示しようとすると、アプリケーションがクラッシュします。ここで

コードです:

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(); 


} 

すべての連絡先のフラグメント:

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エラー:

: 第一にエラーがこの行であります
List<ContactsObjects> contactsList = handler.getAllContacts(); 

第二誤差は、この行である:

listfragment(Contacts_Allクラス)ハンドラが初期化されることはありませんのprintDatabase()メソッドで
fragAll.printDatabase(); //in onCreate 

logcat

+0

あなたのハンドラ(データベース)は、リストフラグメントのプリントデータベースメソッドで決して初期化されていません –

+0

私は行方不明のコードで回答を投稿できますか? – Nenco

答えて

0

..あなたは、この行が欠落しています

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

これは今動作します。ありがとう。それは私がatt – Nenco

+0

喜んでそれは、確かに動作しないと言うので、私はあなたの答えを2minsで受け入れる:) –

関連する問題