V úloze asynchronní dělá konstruktor běží v první řadě doInBackground?

hlasů
1

Já jsem jen pomocí jednoduché logiky se dostat do kontaktu název (vás všechny vidět v kódu níže pomocí if) .Ale že pokud je tvrzení nefunguje .v problém je i porovnávám řetězce S1, který je kontaktní osobou název s s2 což jsem marně z konstruktoru a jsem navýsost přesvědčen, že s1 obsahuje stejné jako s2.So který běží první konstruktor nebo dělat v pozadí? .Coz pokud doInBackground pak jsem třeba, aby parametr globální a ne projít v této metodě ,

private class findContacts extends AsyncTask<Void, String, String> {
    String contactName;
    public findContacts(String contactName) {
        this.contactName = contactName;
    }

    @Override
    protected String doInBackground(Void... voids) {

        Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                null,
                null,
                null,
                null);

        String name = null,phoneNumber=null;

        if (phones != null) {
            while (phones.moveToNext())
            {
                name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));



                System.out.println(1st name +name.toLowerCase()+ 2nd name+contactName.toLowerCase()+ both are same ?+name.toLowerCase().contains(contactName.toLowerCase()));

                if (name.toLowerCase().equals(contactName.toLowerCase())){   // The problem lies here 
                    System.out.println(name+ +phoneNumber);
                    phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                }else {
                   // newPhoneNum=123456;
                }

            }

            phones.close();
        }
        return phoneNumber;

    }

zadejte

Položena 20/10/2018 v 12:44
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
2

AsyncTask#doInBackground()pouze dorovná jednou jsi zavolal execute()na svém objektu. To je to, jak jeho díla asynchronně. to bude samozřejmě volal po konstruktoru. Ladění kódu uvnitř doInBackground.

POZNÁMKA: - Můžete také volat doInBackground()přímo, stejně jako nějaký normální non-statické metody, ale to nebude mít nějaký smysl vést takhle to nebude mít volání asynchronně. Vaše volání by měl být takto:

new findContacts ("Alice").execute(),

Název třída by měla být FindContactsne findContacts( Java jmenovat konvence ).

Odpovězeno 20/10/2018 v 12:56
zdroj uživatelem

hlasů
1

Instrukce uvnitř konstruktoru jsou provedeny před všemi ostatními instrukcemi jen po konkretizaci. DoInBackground je volána při spuštění úlohy asynchronní.

Odpovězeno 20/10/2018 v 12:57
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more