android - 如果从数据库接收空数据显示(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);
}
解决方案
您的情况有两种可能的错误:数据不存在(getString
返回 null 和parseDouble
throws NullPointerException
)或格式不正确(parseDouble
throws 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(“某些数据无效”) .
推荐阅读
- python - Heroku/Django - 找不到 Postgresql 数据库
- google-cloud-platform - 数据流 [刷新您的凭据时出现问题]
- azure-data-studio - Azure Data Studio 加载文件数据时出错
- flutter - 我想构建一个可以在颤动中访问硬键按钮的应用程序。我该如何实施?
- python - AttributeError:“模块”对象没有属性“ensure_str”
- apache-spark - 通过 Spark SQL 读取 Hive Table 的最佳方法是什么?
- sql - 使用插入选择查询在值为空的地方插入 Null
- python - 如何从 XML 文件中获取数据?
- java - 以有效的方式将postgres数据库数据转换为Json
- reactjs - useState 是如何更新组件的?