在我的应用程序中,我使用联系人数据库,并使用RecyclerView
显示那些联系人。当我单击联系人时,我想从数据库中的表中获取其数据,并将其加载到新的活动ContactCard
中。我有一个AsyncTask()来获取与所选PhoneNumber
匹配的contactId
对象,但是我还需要从其他表中检索Address
和Email
对象。
我希望能够在获取所有相关数据之后启动活动,并且我尝试在活动中使用Contacts RecyclerView
来执行此操作,但是由于尚未获取数据,因此应用程序崩溃。
我可以使用意图调用新活动,但是在启动新活动(有效显示此数据之前,如何确保从不同表中提取数据?)>
我的一些代码:
public class PhoneNumberRepository { private WorksideDatabase worksideDatabase; private List<PhoneNumber> returnedNumbers; private Context mContext; public PhoneNumberRepository(Context context) { String DB_NAME = "workside_database"; worksideDatabase = Room.databaseBuilder(context, WorksideDatabase.class, DB_NAME).build(); mContext = context; } public List<PhoneNumber> fetchPhoneNumbers(final int id) { new AsyncTask<Integer, Void, List<PhoneNumber>>() { @Override protected List<PhoneNumber> doInBackground(Integer... ids) { returnedNumbers = worksideDatabase.phoneNumberDao().getPhoneNumbersById(id); System.out.println(returnedNumbers); for (PhoneNumber pn : returnedNumbers) { System.out.println("Number: " + pn.getPhoneNumber()); } return returnedNumbers; } // This runs in UI when background thread finishes @Override protected void onPostExecute(List<PhoneNumber> result) { super.onPostExecute(result); System.out.println("Entered onPostExecute of fetchPhoneNumbers"); // for (PhoneNumber pn : result) { // Toast.makeText(mContext, pn + "", Toast.LENGTH_SHORT).show(); // } } }.execute(); return returnedNumbers; } public List<PhoneNumber> getPhoneNumbers(int id) { return fetchPhoneNumbers(id); } }
ContactsFragment:
adapter.setOnItemClickListener( contact -> { Intent viewContact = new Intent(getActivity(), WorksideContactCard.class); viewContact.putExtra(WORKSIDE_CONTACT, contact); PhoneNumberRepository phoneNumberRepository = new PhoneNumberRepository(getActivity().getApplicationContext()); List<PhoneNumber> phoneNumberList; phoneNumberList = phoneNumberRepository.getPhoneNumbers(contact.getId()); ArrayList<PhoneNumber> arrlistPhoneNumbers = new ArrayList<>(phoneNumberList); viewContact.putParcelableArrayListExtra( WORKSIDE_CONTACT_PHONE_NO, arrlistPhoneNumbers); startActivity(viewContact); }
在我的应用程序中,我使用联系人数据库,并使用RecyclerView显示那些联系人。当我单击联系人时,我想从数据库中的表中获取其数据,并将其加载到新的活动中,...
将联系人存储在doInBackground()
将您的存储库类更改为类似的内容