Estoy tratando de implementar una devolución de llamada para Android Java JsonObjectRequests. He encontrado decenas de mensajes que muestran código que es casi palabra por palabra. Mi problema es que el callbackes nulo. Vea los dos comentarios en línea.
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);
}
}
Para que quede claro, me di cuenta que una vez que callbackno era nula sólo una vez cuando me estaba poniendo a prueba. Repetir las carreras no han producido una devolución de llamada no nulo desde entonces. Estoy sólo 8 días en Java, así que por favor perdone si he hecho algo ingenuo.
El DispatchBuddyBaseSingleton se instancia en la actividad principal de una sola vez, y DBVolleylo mismo. Todas las referencias adicionales obtienen el mismo a través de DispatchBuddyBase.getInstance(). No he tenido ningún problema con las clases anónimas en otros lugares.
El código del voleo es bastante básico y dispara solicitudes bien, la JsonObjectRequest consigue con éxito todo lo que espero de Google. Todo lo demás está trabajando oleaje excepción de esta devolución de llamada.
¿Qué necesito para fijar correctamente para pasar esta devolución de llamada?













