Başka bir işleve geçirilen zaman Java anonim sınıf (bir arabirim uygulayan) geri arama null

oy
1

Ben Android Java JsonObjectRequests için geri arama uygulamak çalışılıyor. Neredeyse kelimesi kelimesine olan kod gösteren mesajların onlarca buldum. Benim sorunum olmasıdır callbackboş. İki satır içi yorumları gör.

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

Açık olmak gerekirse, ben bir kez unutmayın ki callbackboş değildi sadece bir kez ı test edildiğinde. Tekrarlama çalışır o zamandan beri boş olmayan bir geri arama üretemiyor. Ben naif bir şey yaptıysanız bu yüzden af lütfen sadece 8 gün Java içine değilim.

DispatchBuddyBaseTekil sadece bir kez ana aktivitede instanced edilir ve DBVolleyaynı şekilde. Tüm ilave referanslar ile aynı elde DispatchBuddyBase.getInstance(). Başka bir yerde anonim sınıfları ile herhangi bir sorun olmadı.

Volley kodu çıplak kemikleri ve sadece iyi istekleri ateşler, JsonObjectRequest başarıyla Google'dan bekledikleri her şeyi alır. Her şey bu callback'inde hariç kabarma çalışıyor.

Ne doğru bu geri arama geçmesine düzeltmek gerekir?

Oluştur 22/02/2018 saat 09:22
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

Tamam, bu çözüldü işaretleme. Occam'ın jilet. Ben istemeden geri arama için bir edebi boş parametresi ile çağırıyordu başka bir kod bölümünde çok fazla ve uncommented ctrl-z çarptı.

Yukarıdaki kod mükemmel çalışıyor.

Cevap 22/02/2018 saat 21:29
kaynak kullanıcı

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