In einer Async Aufgabe tut Konstruktor läuft zunächst doInBackground?

stimmen
1

Ich verwende nur eine einfache Logik zu bekommen Namen in Verbindung (alle kann unter Verwendung von if-Anweisung im Code sehen) .Aber, dass if-Anweisung funktioniert nicht .Der Problem i String s1 bin im Vergleich des mit s2 die Kontaktperson Name ist die ich aus dem Konstruktor bin immer und ich bin äußerst zuversichtlich, dass s1 gleich s2.So enthält, das erste Konstruktor läuft oder tun im Hintergrund? Coz, wenn doInBackground dann muß ich die Parameter global machen und in diesem Verfahren nicht passieren .

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;

    }

Geben

Veröffentlicht am 20/10/2018 um 12:44
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
2

AsyncTask#doInBackground()nur aufgerufen , wenn Sie rief execute()auf seinem Objekt. Das ist , wie seine Werke asynchron. es wird natürlich nach dem Konstruktor aufgerufen. Debuggen von Code innerhalb doInBackground.

HINWEIS: - Sie können auch anrufen doInBackground()direkt nur wie eine normale nicht-statische Methode , aber dies wird nicht sinnvoll , diese Art und Weise macht verursachen wird es nicht asynchron aufrufe lassen. Ihre Berufung sollte wie:

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

Klassenname sollte FindContactsnicht findContacts( Java Namenskonventionen ).

Beantwortet am 20/10/2018 um 12:56
quelle vom benutzer

stimmen
1

Anweisungen innerhalb des Konstruktors sind vor allen anderen Anweisungen nur nach der Instanzierung ausgeführt. Die doInBackground wird aufgerufen, wenn Sie von der Asynchron-Aufgabe auszuführen.

Beantwortet am 20/10/2018 um 12:57
quelle vom benutzer

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