Java anonym klasse (implementere et grensesnitt) tilbakeringing er null når sendes til en annen funksjon

stemmer
1

Jeg forsøker å gjennomføre en tilbakeringing for Android Java JsonObjectRequests. Jeg har funnet flere titalls innlegg som viser kode som er nesten ordrett. Mitt problem er at den callbacker null. Se de to inline kommentarer.

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);
    }
}

For å være klar, det gjorde jeg en gang oppmerksom på at callbackikke var null bare en gang da jeg var testing. Gjenta løper har ikke produsert en ikke-null tilbakeringing siden da. Jeg er bare 8 dager i Java, så tilgi hvis jeg har gjort noe naiv.

Den DispatchBuddyBaseenkelt er instanced i hovedaktiviteten bare en gang, og DBVolleylikeledes. Alle ytterligere referanser oppnå det samme via DispatchBuddyBase.getInstance(). Jeg har ikke hatt noen problemer med anonyme klasser andre steder.

Volley-kode er bare bones og fyrer av forespørsler helt fint, JsonObjectRequest hell får alt jeg forventer fra Google. Alt annet fungerer swell unntak for tilbakeringing.

Hva må jeg gjøre for å fikse til riktig passere denne tilbakeringing?

Publisert på 22/02/2018 klokken 09:22
kilden bruker
På andre språk...                            


1 svar

stemmer
0

OK, merking dette løses. Ockhams barberkniv. Jeg utilsiktet treffer ctrl-z for mye og uncommented i en annen del av koden som ringte med en bokstavelig null parameter for tilbakeringing.

Koden ovenfor fungerer perfekt.

Svarte 22/02/2018 kl. 21:29
kilden bruker

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