Java ανώνυμο κατηγορία (εφαρμογή ενός interface) επανάκλησης είναι μηδενική όταν περάσει σε μια άλλη λειτουργία

ψήφοι
1

Είμαι προσπαθεί να εφαρμόσει ένα επανάκλησης για το Android Java JsonObjectRequests. Έχω βρεθεί δεκάδες δημοσιεύσεις που δείχνει κώδικα που είναι σχεδόν κατά λέξη. Το πρόβλημά μου είναι ότι η callbackείναι μηδενική. Δείτε τα δύο ενσωματωμένα σχόλια.

public interface JsonObjectCallbackInterface {
    void onSuccess(JSONObject result);
}
class DispatchBuddyBase {
    //...

    public void addGmapMarker(String inAddress) {
        final String address = DBB.prepareAddress(inAddress);
        DatabaseReference ref = DBB.getTopPathRef(/geocodedAddresses);

        ref.orderByChild(address)
                .equalTo(address)
                .addListenerForSingleValueEvent(
                new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Log.i(TAG, address+ stored: +dataSnapshot.exists());
                if (!dataSnapshot.exists()) {
                    DBB.getLatLng(
                           17 River Rd Meriden CT 06451,
                            new JsonObjectCallbackInterface() {
                         //      ^--- why is this passing a **null?**

                        @Override
                        public void onSuccess(JSONObject response) {
                            Log.i(TAG, got a json body:+response.toString());
                            addGmapMarker(response);
                        }
                    });
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
    }
}
public class DispatchesActivity extends AppCompatActivity implements
    OnMapReadyCallback,
    GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener,
    ResultCallback<LocationSettingsResult> {
    //...

    public void getLatLng(final String address,
                          final JsonObjectCallbackInterface callback) {
        // why does this get a **null** callback? -------------^

        Log.e(TAG, callback is: +callback);
        String url = https://maps.googleapis.com/maps/api/geocode/json?address=
                + address;

        JsonObjectRequest jsObjRequest = new JsonObjectRequest
                (Request.Method.GET, url, null, new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        Log.e(TAG,Response:  + response.toString());
                        DatabaseReference ref = getTopPathRef(/geocodedAddresses).push();

                        Map<String, Object> u = new HashMap<>();
                        u.put(address, address);
                        u.put(geocoded, response.toString());

                        ref.updateChildren(u, new DatabaseReference.CompletionListener() {
                            @Override
                            public void onComplete(DatabaseError databaseError,
                                                   DatabaseReference databaseReference) {
                                if (databaseError != null) {
                                    Log.e(TAG,Geocoded address could not be saved 
                                            + databaseError.getMessage());
                                } else {
                                    Log.e(TAG,Geocoded address saved successfully.);
                                }
                            }
                        });
                        Log.e(TAG, callback2 is: +callback);
                        callback.onSuccess(response);
                    }
                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // TODO Auto-generated method stub
                    }
                });

        DBVolley.getInstance(context)
                .addToRequestQueue(jsObjRequest);
    }
}

Για να είμαστε σαφείς, έκανα μια φορά να σημειώσετε ότι callbackδεν ήταν άκυρη μόνο μία φορά , όταν ήμουν έλεγχο. Επαναλάβετε τα τρεξίματα δεν έχουν παράγει μια μη-μηδενική επανάκλησης από τότε. Είμαι μόνο 8 ημέρες σε Java, έτσι παρακαλούμε να συγχωρήσει αν έχω κάνει κάτι αφελείς.

Η DispatchBuddyBaseμονήρεις είναι instanced στην κύρια δραστηριότητα μόνο μία φορά, και DBVolleyτο ίδιο. Όλες οι πρόσθετες αναφορές ληφθεί το ίδιο μέσω DispatchBuddyBase.getInstance(). Δεν είχα κανένα πρόβλημα με ανώνυμες τάξεις αλλού.

Ο κωδικός Volley είναι γυμνά κόκαλα και πυρκαγιές στα ανοικτά των αιτήσεων μια χαρά, η JsonObjectRequest παίρνει με επιτυχία όλα όσα περιμένει από την Google. Όλα τα άλλα είναι φούσκωμα που εργάζονται εκτός από αυτό επανάκλησης.

Τι πρέπει να κάνω για να διορθώσετε για να περάσει σωστά αυτή επανάκλησης;

Δημοσιεύθηκε 22/02/2018 στις 09:22
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

Ok, σήμανση αυτό λυθεί. ξυράφι του Occam. Έχω κατά λάθος χτύπησε ctrl-z πάρα πολύ και σε σχόλιο σε άλλο τμήμα του κώδικα που ζητούσε με τη γραμματική παράμετρο null για το επανάκλησης.

Ο παραπάνω κώδικας λειτουργεί τέλεια.

Απαντήθηκε 22/02/2018 στις 21:29
πηγή χρήστη

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