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?













