Σε ένα έργο ασύγχρονη κάνει κατασκευαστή τρέχει πρώτη του doInBackground;

ψήφοι
1

Είμαι απλά χρησιμοποιώντας μια απλή λογική για να πάρει να επικοινωνήσετε με το όνομα (μπορείτε όλοι να βλέπετε στην παρακάτω κώδικα χρησιμοποιώντας εάν δήλωση) .Αλλά ότι αν η δήλωση δεν λειτουργεί .Ο πρόβλημα είναι ότι είμαι συγκρίνοντας s1 κορδόνι το οποίο είναι το όνομα προσώπου επαφής με το s2 που είμαι το πάρει από τον κατασκευαστή και είμαι εξαιρετικά σίγουροι ότι s1 περιέχει το ίδιο με s2.So που τρέχει πρώτο κατασκευαστή ή να κάνετε στο παρασκήνιο; .Coz αν doInBackground τότε θα πρέπει να κάνει την παράμετρο παγκόσμια και όχι να περάσει σε αυτή τη μέθοδο .

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;

    }

εισάγετε

Δημοσιεύθηκε 20/10/2018 στις 12:44
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
2

AsyncTask#doInBackground()μόνο να λέγεται στιγμή που θα ονομάζεται execute()στο αντικείμενο. Thats πώς λειτουργεί ασύγχρονα της. θα ονομάζεται φυσικά μετά κατασκευαστή. Τον εντοπισμό σφαλμάτων κώδικα στο εσωτερικό doInBackground.

ΣΗΜΕΙΩΣΗ: - Μπορείτε επίσης να καλέσετε doInBackground()άμεσα ακριβώς σαν ένα κανονικό μη-στατική μέθοδο, αλλά αυτό δεν θα έχει κανένα νόημα να προκαλέσουν με αυτόν τον τρόπο δεν θα πάρει κλήση ασύγχρονα. Κλήση σας θα πρέπει να είναι ως εξής:

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

Όνομα της κλάσης θα πρέπει να είναι FindContactsόχι findContacts( Java ονομάζοντας συμβάσεις ).

Απαντήθηκε 20/10/2018 στις 12:56
πηγή χρήστη

ψήφοι
1

Οι οδηγίες στο εσωτερικό του κατασκευαστή εκτελείται πριν από όλους τους άλλους οδηγίες αμέσως μετά στιγμιότυπο. Η doInBackground καλείται όταν εκτελείτε την εργασία ασύγχρονη.

Απαντήθηκε 20/10/2018 στις 12:57
πηγή χρήστη

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