Java anonymní třídy (prováděcí rozhraní) callback je null, když přešel na jinou funkci

hlasů
1

Já jsem se snaží zavést zpětné volání pro Android Java JsonObjectRequests. Zjistil jsem, desítky míst ukazující kód, který je téměř doslovně. Můj problém je, že callbackje nulová. Podívejte se na dvě vložené poznámky.

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

Aby bylo jasno, já jsem kdysi na vědomí, že callbacknebyl null jen jednou , když jsem testoval. Opakujte běží nepřinesly nenulovou zpětné volání od té doby. Je mi teprve osm dnů v Javě, takže prosím omluvte, jestli jsem udělal něco naivní.

DispatchBuddyBaseSingleton instanced v hlavní činnosti pouze jednou, a DBVolleypodobně. Všechny další odkazy získat stejný via DispatchBuddyBase.getInstance(). Neměl jsem žádné problémy s anonymních tříd jinde.

Salvami kód je holé kosti a vystřelí z požadavků v pohodě se JsonObjectRequest úspěšně dostane vše, co očekáváte od společnosti Google. Všechno ostatní funguje bobtnat kromě této zpětné volání.

Co je potřeba opravit správně předat tento zpětné volání?

Položena 22/02/2018 v 09:22
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Ok, značení toto řešeno. Occamova břitva. I neúmyslně zasáhl ctrl-z příliš mnoho a uncommented v jiné části kódu, který byl volá s doslovným parametrem null pro zpětné volání.

Výše uvedený kód funguje perfektně.

Odpovězeno 22/02/2018 v 21:29
zdroj uživatelem

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