user7113784
user7113784

Reputation:

WindowManager: android.view.WindowLeaked: that was originally added here

ERROR: WindowManager: android.view.WindowLeaked: Activity com.example.altu.calllocker.activity.Home has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{22165159 V.E..... R......D 0,0-456,174} that was originally added here

i just fetch all contacts and save it to realm for offline but after loading contacts it crashes with above mention ERROR.... i have implemented progreessDialog completely but how does dialog can be the reason for the crash i dont get it..

    public class Home extends AppCompatActivity {
    Switch sync;
    SearchView searchView;
    ContactAdapter contactAdapter;
    Realm realm;



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


        Realm.init(Home.this);
        realm = Realm.getDefaultInstance();

        sync = (Switch) findViewById(R.id.sync);
        //  progressDialog.show();

        sync.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    sync.setChecked(isChecked);
                    new Async().execute();
                }
            }
        });

    }

    private class Async extends AsyncTask<Void, Void, Void> {
        ProgressDialog progressDialog;

        @Override
        protected Void doInBackground(Void... params) {
            getAllContact();
            return null;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog = new ProgressDialog(Home.this);
            progressDialog.setMessage("Loading....");
            progressDialog.show();
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
                progressDialog.dismiss();
        }
    }





    private void getAllContact() {

        RealmList<ContactsModel> contactlist = new RealmList<>();
        ContactsModel contactVO;

        ContentResolver contentResolver = getContentResolver();
        Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
        if (cursor.getCount() > 0) {
            while (cursor.moveToNext()) {

                int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));
                if (hasPhoneNumber > 0) {
                    String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                    String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

                    contactVO = new ContactsModel();
                    contactVO.setDisplay_name(name);
                    contactVO.set_id(id);

                    Cursor phoneCursor = contentResolver.query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                            new String[]{id},
                            null);
                    if (phoneCursor.moveToNext()) {
                        String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        contactVO.setData1(phoneNumber);
                    }
                    Cursor emailCursor = contentResolver.query(
                            ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
                            new String[]{id}, null);
                    while (emailCursor.moveToNext()) {
                        String emailId = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                    }
                    emailCursor.close();
                    phoneCursor.close();
                    contactlist.add(contactVO);
                }

            }
            HashSet<ContactsModel> hashSet = new HashSet<>();
            hashSet.addAll(contactlist);
            contactlist.clear();
            contactlist.addAll(hashSet);
            realm.beginTransaction();
            realm.copyToRealmOrUpdate(contactlist);
            realm.commitTransaction();
            contactlist.clear();


            RealmResults<ContactsModel> realmResults = realm.where(ContactsModel.class).findAll();
            for (ContactsModel c : realmResults) {
                Log.e("id", c.getData1());
                Log.e("name", c.getDisplay_name());
                contactlist.add(c);
            }


        }
    }
}

Upvotes: 0

Views: 1340

Answers (1)

altu
altu

Reputation: 357

make getallcontacts method retun realmlist and make separate method to save data to realm

 private RealmList<ContactsModel> getAllContact() {
    RealmList<ContactsModel> contactlist = new RealmList<>();
    //  List<ContactsModel> contactsModelList = new ArrayList<>();
    ContactsModel contactVO;

    ContentResolver contentResolver = getContentResolver();
    Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
    if (cursor.getCount() > 0) {
        while (cursor.moveToNext()) {

            int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));
            if (hasPhoneNumber > 0) {
                String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

                contactVO = new ContactsModel();
                contactVO.setDisplay_name(name);
                contactVO.set_id(id);

                Cursor phoneCursor = contentResolver.query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                        new String[]{id},
                        null);
                if (phoneCursor.moveToNext()) {
                    String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    contactVO.setData1(phoneNumber);
                }
                Cursor emailCursor = contentResolver.query(
                        ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                        null,
                        ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
                        new String[]{id}, null);
                while (emailCursor.moveToNext()) {
                    String emailId = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                }
                emailCursor.close();
                phoneCursor.close();
                // contactsModelList.add(contactVO);
                contactlist.add(contactVO);
            }

        }

        //saveToRealm(contactlist);
    }
    return contactlist;
}

public void saveToRealm(RealmList<ContactsModel> contactlist) {
   /* ProgressDialog progressDialog = new ProgressDialog(Home.this);
    progressDialog.setMessage("Loading...");
    progressDialog.setCancelable(false);
    progressDialog.show();*/
    if (contactlist != null) {
        HashSet<ContactsModel> hashSet = new HashSet<>();
        hashSet.addAll(contactlist);
        contactlist.clear();
        contactlist.addAll(hashSet);
        realm.beginTransaction();
        realm.copyToRealmOrUpdate(contactlist);
        realm.commitTransaction();

        contactlist.clear();


        RealmResults<ContactsModel> realmResults = realm.where(ContactsModel.class).findAll();
        Log.e("size", realmResults.size() + "");
        for (ContactsModel c : realmResults) {
            Log.e("id", c.getData1());
            Log.e("name", c.getDisplay_name());
            contactlist.add(c);

        }
        //   progressDialog.dismiss();
    } else {
        // do nothing
        // progressDialog.dismiss();
    }
}

and change setonchecklistener like below

sync.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView,
            boolean  isChecked) {
                if (isChecked) {
                    sync.setChecked(isChecked);
                    new Async().execute();
                }

            }
        });
        saveToRealm(getAllContact());}

Upvotes: 0

Related Questions