Java anonimowych klasy (wdrożenie interfejsu) zwrotna jest null, gdy przeszedł do innej funkcji

głosy
1

Ja próbuje wdrożyć zwrotnego dla Android Java JsonObjectRequests. Znalazłem kilkadziesiąt stanowisk przedstawiających kod, który jest prawie dosłownie. Moim problemem jest to, że callbackjest nieważna. Zobacz dwa inline komentarze.

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

Żeby było jasne, ja raz zwrócić uwagę, że callbacknie była zerowa tylko raz , kiedy testuje. Powtórz biegnie nie przyniosły niezerowym zwrotnego od tamtego czasu. Jestem tylko 8 dni w Javie, więc proszę wybaczyć jeśli zrobiłem coś naiwnego.

DispatchBuddyBaseSingleton jest instanced w głównej działalności tylko raz, i DBVolleyto samo. Wszystkie dodatkowe referencje uzyskać poprzez samo DispatchBuddyBase.getInstance(). Nie miałem żadnych problemów z anonimowych klas gdzie indziej.

Kod Volley jest szkielety i odpala żądania tylko w porządku, JsonObjectRequest powodzeniem dostaje wszystko, czego oczekiwać od Google. Wszystko inne jest puchnąć pracy z wyjątkiem tego zwrotnego.

Czego potrzebuję, aby rozwiązać poprawnie przekazać tę zwrotnego?

Utwórz 22/02/2018 o 09:22
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Ok, oznakowanie to rozwiązać. brzytwa Ockhama. I mimowolnie Ctrl-Z za dużo i komentarzem w innej części kodu, który dzwonił z dosłownym parametru NULL dla wywołania zwrotnego.

Powyższy kod działa doskonale.

Odpowiedział 22/02/2018 o 21:29
źródło użytkownik

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