Java anonieme klasse (het implementeren van een interface) callback is null wanneer deze doorgegeven aan een andere functie

stemmen
1

Ik probeer om een callback voor Android Java JsonObjectRequests implementeren. Ik heb tientallen berichten waaruit blijkt code die bijna woordelijk gevonden. Mijn probleem is dat het callbackis nul. Zie de twee inline opmerkingen.

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

Om duidelijk te zijn, heb ik ooit mee dat callbackwas niet null slechts één keer , toen ik aan het testen was. Herhaal runs niet sindsdien produceerde een niet-null callback. Ik ben slechts 8 dagen in Java, dus vergeven als ik iets naïef heb gedaan.

De DispatchBuddyBaseSingleton is instanced in de hoofdactiviteit maar een keer, en DBVolleyevenzo. Aanvullende referenties krijgen hetzelfde middel DispatchBuddyBase.getInstance(). Ik heb geen problemen met anonieme klassen elders hadden.

De Volley code is minimalistisch en vuurt verzoeken prima, de JsonObjectRequest succes krijgt alles wat ik verwacht van Google. Al het andere werkt deining behalve voor deze callback.

Wat heb ik nodig om vast te stellen om correct te passeren deze callback?

De vraag is gesteld op 22/02/2018 om 09:22
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Ok, markering dit opgelost. Occam's scheermes. Ik per ongeluk raakte ctrl-z te veel en uncommented in een ander deel van de code die is bellen met een letterlijke null parameter voor de callback.

De bovenstaande code werkt perfect.

antwoordde op 22/02/2018 om 21:29
bron van user

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