Ich bin versucht , einen Rückruf für Android Java JsonObjectRequests zu implementieren. Ich habe Dutzende von Beiträgen zeigen Code gefunden, der fast wörtlich ist. Mein Problem ist , dass die callbackNull ist. Siehe die beiden Inline - Kommentare.
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);
}
}
Um klar zu sein, habe ich einmal beachten , dass callbacknicht null war nur ein einziges Mal , als ich zu testen. Wiederholen Sie Läufe haben keine Nicht-Null - Rückruf seitdem produziert. Ich bin nur 8 Tage in Java, so wenden Sie sich bitte verzeihen , wenn ich naiv etwas getan haben.
Die DispatchBuddyBaseSingleton ist in der Haupttätigkeit instanziert nur einmal, und DBVolleyebenfalls. Alle weiteren Referenzen erhalten diese über DispatchBuddyBase.getInstance(). Ich habe nicht an anderer Stelle Probleme mit anonymen Klassen habe.
Der Volley Code nackten Knochen ist und Anfragen feuert ganz gut, bekommt der JsonObjectRequest erfolgreich alles, was ich von Google erwarten. Alles andere funktioniert Dünung mit Ausnahme dieser Rückruf.
Was brauche ich diesen Rückruf richtig zu beheben passieren?













