首页 > 解决方案 > 如果从数据库接收空数据显示(Toast.makeText)android,如何进行截击

问题描述

我正在开发一个包含谷歌地图的应用程序我通过使用 Volley 自由在我的应用程序和数据库之间建立连接从 MySQL 数据库获取谷歌地图的数据如果数据库有经度和纬度,代码可以正常工作,但如果我没有数据则问题进入应用程序崩溃的经纬度字段。

如果从数据库接收到空数据显示 (Toast.makeText ) 或其他任何内容但不会使我的应用程序崩溃,我该如何进行截击?

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

标签: androidgoogle-maps

解决方案


您的情况有两种可能的错误:数据不存在(getString返回 null 和parseDoublethrows NullPointerException)或格式不正确(parseDoublethrows NumberFormatException),您都没有处理这两种情况。因此,将您的循环修改为如下所示,并在异常块中添加任何所需的处理,例如吐司:

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.
    }
}

请注意,如果您显示一个 toast,它将显示在每个错误上 - 所以最好在异常块中简单地设置一个标志,然后在循环之后如果标志为真,然后显示 toast(“某些数据无效”) .


推荐阅读