2016-12-16 8 views
1

データベースからgetAllContactsのメソッドを持つ連絡先テーブルヘルパーがあります。 私はこのメソッドを非同期タスクで呼び出し、連絡先の配列リストを返します。データベースと非同期タスクから空のリストを取得する

しかし、私は、デバッグをしたとして、私はgetAllContacts方法からCONLISTが0

public ArrayList<Contact> getAllContacts() { 
    ArrayList<Contact> conList = new ArrayList<Contact>(); 

    String selectQuery = "SELECT * FROM " + CONTACT_TABLE; 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    if (cursor.moveToFirst()) { 
     do { 

      Contact contact = new Contact(); 

      contact.setContactId(cursor.getString(0)); 
      contact.setmUserName(cursor.getString(1)); 
      contact.setmPass(cursor.getString(2)); 
      contact.setmMobileNo(cursor.getString(3)); 
      contact.setmEmailId(cursor.getString(4)); 
      contact.setmProfileImage(cursor.getString(5)); 
      contact.setmFullName(cursor.getString(6)); 
      contact.setmJobTitle(cursor.getString(7)); 
      contact.setmWorkAddress(cursor.getString(8)); 
      contact.setmWorkPhone(cursor.getString(9)); 
      contact.setmHomeAddress(cursor.getString(10)); 
      contact.setmCompany(cursor.getString(11)); 


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

    return conList; 
} 

非同期タスクを返すことが判明:

public class GetContacts extends AsyncTask<Void,Void,ArrayList<Contact>> { 

     private Context mContext; 
     private ContactTableHelper dbConnector; 
     private GetContactsFromDbCallback getContactsFromDbCallback; 

     public GetContacts(Context context,GetContactsFromDbCallback getContactsFromDbCallback) 
     { 

      this.mContext = context; 
      this.getContactsFromDbCallback = getContactsFromDbCallback; 
      dbConnector = new ContactTableHelper(context); 

     } 
    public interface GetContactsFromDbCallback{ 
     void doPostExecute(ArrayList<Contact> contacts,boolean b); 
    } 

     @Override 
     public ArrayList<Contact> doInBackground(Void... params) { 

      ArrayList<Contact> contacts = new ArrayList<>(); 

      contacts = dbConnector.getAllContacts(); 

      return contacts; 
     } 

     @Override 
     public void onPostExecute(ArrayList<Contact> b) { 
      if (b != null) { 
       // set the adapter's Cursor 

       getContactsFromDbCallback.doPostExecute(b,true); 

       dbConnector.close(); 
      } 
     } 
} 

コールバック:MainActivityはAppCompatActivityがGetContactsを実装して拡張し

パブリッククラスを。 GetContactsFromDbCallback {

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

    contactList = new ArrayList<Contact>(); 

} 


@Override 
public void onResume() 
{ 
    super.onResume(); 

    contactList.clear(); 

    if(!firstTimeLogin) 
    { 
     contactList.clear(); 

    // contactDb = new ContactTableHelper(MainActivity.this); 
    // mDb = new UserTableHelper(MainActivity.this); 

     // contactList = mDb.getAllContacts(); 

     new GetUser(MainActivity.this,MainActivity.this).execute(mUserId); 

     new GetContacts(MainActivity.this,MainActivity.this).execute(); 

    } 
    else { 
     new GetUserAsyncTask(mUserId).execute(mUserId); 
     new GetContactsAsyncTask(this, MainActivity.this, mUserId,MainActivity.this).execute(); 

     firstTimeLogin = false; 

     SharedPreferences.Editor editor = getSharedPreferences("UserProfile",MODE_PRIVATE).edit(); 
     editor.putBoolean("login",firstTimeLogin); 
     editor.commit(); 
    } 

    recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

    recyclerView.setHasFixedSize(true); 
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(MainActivity.this); 
    recyclerView.setLayoutManager(mLayoutManager); 
    recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL)); 
    recyclerView.setItemAnimator(new DefaultItemAnimator()); 

    adapter = new ContactAdapter(MainActivity.this, contactList); 
    recyclerView.setAdapter(adapter); 

    recyclerView.addOnItemTouchListener(new RecyclerTouchListener(MainActivity.this, recyclerView, new ClickListener() { 
     @Override 
     public void onClick(View view, int position) { 
      final Contact contact = contactList.get(position); 

      // custom dialog 

     } 

     @Override 
     public void onLongClick(View view, int position) { 

     } 
    })); 

} 

@Override 
public void doPostExecute(ArrayList<Contact> contactArrayList,boolean y) { 

    contactList = contactArrayList; 

    adapter.notifyDataSetChanged(); 
} 

ここで何が問題になりますか? .. ..ありがとうございまし代わりにあなたが行う必要があり、この

contactList = contactArrayList; 

+0

データベースが空ですか? –

+0

ちなみにselect文のための書き込み可能なデータベースは必要ありません –

+0

データベースは空ではありません。これはアクティビティでこのメソッドを呼び出す前に正常に動作していましたので、@ cricket_007 – Sid

答えて

3

を助けてください、この

contactList.clear(); 
contactList.addAll(contactArrayList); 

には、ArrayListを解除参照しないので、アダプタもはやされていますあなたがそれを通知しようとしているリストについて知っています。

関連する問題