Как сделать залп, если при получении пустых данных из базы данных отображается (Toast.makeText) android - PullRequest
0 голосов
/ 26 апреля 2020

Я разрабатываю приложение, содержащее Карты Google. Я получаю данные карты Google из базы данных MySQL, используя Volley Liberty для установления соединения между моим приложением и базой данных. Код работает нормально, если в базе данных есть Долгота и широта, но проблема в том, что У меня нет данных в поле долготы и широты, приложение является cra sh.

Как я могу сделать залп, если при получении пустых данных из базы данных отображается (Toast.makeText) или что-то другое, но не cra sh мое приложение?

 private void getMarkers() {
        StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                    Log.e("Response: ", response.toString());
                    try {
                        JSONObject jObj = new JSONObject(response);
                        String getObject = jObj.getString("location");
                        JSONArray jsonArray = new JSONArray(getObject);
                        for (int i = 0; i < jsonArray.length(); i++) {
                            JSONObject jsonObject = jsonArray.getJSONObject(i);
                            //title = jsonObject.getString(TITLE);
                            latLng = new LatLng(Double.parseDouble(jsonObject.getString(LT)), Double.parseDouble(jsonObject.getString(LG)));
                              addMarker(latLng, title);
                            gMap.animateCamera(zoomingLocation(latLng));
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("Error: ", error.getMessage());
            }
        });

        RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
        requestQueue.add(stringRequest);

    }
    private CameraUpdate zoomingLocation(LatLng latLng) {
       return CameraUpdateFactory.newLatLngZoom(latLng, 7);
    }

1 Ответ

1 голос
/ 26 апреля 2020

В вашем случае возможны две ошибки: данные не существуют (getString возвращает ноль и parseDouble throws NullPointerException) или неправильно отформатированы (parseDouble throws NumberFormatException), к которым вы не относитесь обработки. Поэтому измените ваш l oop, чтобы он выглядел следующим образом, и добавьте в блок исключений любую требуемую обработку, такую ​​как тост:

for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject jsonObject = jsonArray.getJSONObject(i);
    //title = jsonObject.getString(TITLE);

    // LT or LG strings may not exist (returns null) or not a valid double
    // so catch Exception (NullPointerException or NumberFormatException)
    try {
        latLng = new LatLng(Double.parseDouble(jsonObject.getString(LT)), Double.parseDouble(jsonObject.getString(LG)));
        addMarker(latLng, title);
        gMap.animateCamera(zoomingLocation(latLng));
    } catch (Exception e) {
        // do something about error such as display Toast.
    }
}

Обратите внимание, что при отображении тоста он будет отображаться при каждой ошибке, поэтому может быть лучше просто установить флаг в блоке исключений, а затем после l oop, если флаг равен true, затем отобразить тост («Некоторые данные недействительны»).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...