Ja próbuje wdrożyć zwrotnego dla Android Java JsonObjectRequests. Znalazłem kilkadziesiąt stanowisk przedstawiających kod, który jest prawie dosłownie. Moim problemem jest to, że callbackjest nieważna. Zobacz dwa inline komentarze.
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);
}
}
Żeby było jasne, ja raz zwrócić uwagę, że callbacknie była zerowa tylko raz , kiedy testuje. Powtórz biegnie nie przyniosły niezerowym zwrotnego od tamtego czasu. Jestem tylko 8 dni w Javie, więc proszę wybaczyć jeśli zrobiłem coś naiwnego.
DispatchBuddyBaseSingleton jest instanced w głównej działalności tylko raz, i DBVolleyto samo. Wszystkie dodatkowe referencje uzyskać poprzez samo DispatchBuddyBase.getInstance(). Nie miałem żadnych problemów z anonimowych klas gdzie indziej.
Kod Volley jest szkielety i odpala żądania tylko w porządku, JsonObjectRequest powodzeniem dostaje wszystko, czego oczekiwać od Google. Wszystko inne jest puchnąć pracy z wyjątkiem tego zwrotnego.
Czego potrzebuję, aby rozwiązać poprawnie przekazać tę zwrotnego?













