Java anonyme Klasse Callback (eine Schnittstelle implementiert) ist null, wenn an eine andere Funktion übergeben

stimmen
1

Ich bin versucht , einen Rückruf für Android Java JsonObjectRequests zu implementieren. Ich habe Dutzende von Beiträgen zeigen Code gefunden, der fast wörtlich ist. Mein Problem ist , dass die callbackNull ist. Siehe die beiden Inline - Kommentare.

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

Um klar zu sein, habe ich einmal beachten , dass callbacknicht null war nur ein einziges Mal , als ich zu testen. Wiederholen Sie Läufe haben keine Nicht-Null - Rückruf seitdem produziert. Ich bin nur 8 Tage in Java, so wenden Sie sich bitte verzeihen , wenn ich naiv etwas getan haben.

Die DispatchBuddyBaseSingleton ist in der Haupttätigkeit instanziert nur einmal, und DBVolleyebenfalls. Alle weiteren Referenzen erhalten diese über DispatchBuddyBase.getInstance(). Ich habe nicht an anderer Stelle Probleme mit anonymen Klassen habe.

Der Volley Code nackten Knochen ist und Anfragen feuert ganz gut, bekommt der JsonObjectRequest erfolgreich alles, was ich von Google erwarten. Alles andere funktioniert Dünung mit Ausnahme dieser Rückruf.

Was brauche ich diesen Rückruf richtig zu beheben passieren?

Veröffentlicht am 22/02/2018 um 09:22
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Ok, diese Kennzeichnung gelöst. Ockhams Rasiermesser. Ich traf unbeabsichtigt Strg-Z zu viel und unkommentiert in einem anderen Abschnitt des Codes, der mit einem wörtlichen null Parametern für den Rückruf Aufruf wurde.

Der obige Code funktioniert perfekt.

Beantwortet am 22/02/2018 um 21:29
quelle vom benutzer

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