在完成应用程序的获取并将所获取的数据传递给它之后,我应该如何启动一个新的Activity?]

问题描述 投票:0回答:2

在我的应用程序中,我使用联系人数据库,并使用RecyclerView显示那些联系人。当我单击联系人时,我想从数据库中的表中获取其数据,并将其加载到新的活动ContactCard中。我有一个AsyncTask()来获取与所选PhoneNumber匹配的contactId对象,但是我还需要从其他表中检索AddressEmail对象。

我希望能够在获取所有相关数据之后启动活动,并且我尝试在活动中使用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显示那些联系人。当我单击联系人时,我想从数据库中的表中获取其数据,并将其加载到新的活动中,...

java android database android-intent android-asynctask
2个回答
0
投票

将联系人存储在doInBackground()


0
投票

将您的存储库类更改为类似的内容

© www.soinside.com 2019 - 2024. All rights reserved.