簡體   English   中英

從數據庫和異步任務獲取空列表

[英]Getting empty list from database and async task

我有一個聯系表助手,其中有從數據庫獲取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;

你需要這樣做

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

您正在取消引用arraylist,因此適配器不再知道您要用來通知它的列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM