Je tente de mettre en œuvre un rappel pour Android Java JsonObjectRequests. J'ai trouvé des dizaines de messages indiquant le code qui est presque mot pour mot. Mon problème est que l' callbackest nulle. Voir les deux commentaires en ligne.
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);
}
}
Pour être clair, je ne note que , une fois callbackn'a pas été nulle juste une fois quand je testais. Répétez pistes ont pas produit un rappel non nulle depuis. Je suis seulement 8 jours en Java, donc s'il vous plaît pardonnez si je l' ai fait quelque chose de naïf.
Le DispatchBuddyBasesingleton est instancié dans l'activité principale , juste une fois, et de DBVolleymême. Toutes les références supplémentaires obtiennent le même via DispatchBuddyBase.getInstance(). Je n'ai pas eu de problèmes avec les classes anonymes ailleurs.
Le code est Volley os nus et tire hors des demandes très bien, le JsonObjectRequest obtient avec succès tout ce que je pense de Google. Tout le reste fonctionne houle sauf pour ce rappel.
Que dois-je fixer passer correctement ce rappel?













