Java анонимный класс (реализующий интерфейс) обратного вызова равна нулю, когда передается другой функции

голоса
1

Я пытаюсь реализовать функцию обратного вызова для Android Java JsonObjectRequests. Я нашел десятки сообщений с указанием кода , который почти дословно. Моя проблема заключается в том , что callbackявляется недействительным. См два встроенных комментариев.

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);
    }
}

Чтобы было ясно, я сразу отметить , что callbackне было пустой только один раз , когда я проверяла. Повторные пробеги не дали непустой обратный вызов с тех пор. Я всего 8 дней в Java, так что простите , пожалуйста , если я сделал что - то наивное.

DispatchBuddyBaseСинглтон инстанс в основной деятельности только один раз, и то DBVolleyже самое. Все дополнительные ссылки получить то же самое с помощью DispatchBuddyBase.getInstance(). У меня не было никаких проблем с анонимными классами в других местах.

Код залп голые кости и выстреливает запросы просто отлично, JsonObjectRequest успешно получает все, что ожидать от Google. Все остальное работает выпуклость для этого обратного вызова, за исключением.

Что мне нужно сделать, чтобы исправить, чтобы правильно передать эту функцию обратного вызова?

Задан 22/02/2018 в 09:22
источник пользователем
На других языках...                            


1 ответов

голоса
0

Хорошо, маркировка это решается. Бритва Оккама. Я нечаянно ударил Ctrl-Z слишком много, и раскомментировать в другой части кода, который звонил с буквальным параметром нуль для обратного вызова.

Приведенный выше код работает отлично.

Ответил 22/02/2018 в 21:29
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more