数据类型转换不当导致数据库不能正确插入数据问题

我在上一篇博客提到过我在做一个创训的项目,就是一个基于百度地图的简单记事本应用,这个应用目前已经完成,但是前几天在开发过程中遇到的一个问题,我感觉比较有意思,于是就分享出来。

项目背景:

两个activity之间通过intent实现数据传递。

Mainactivity:展示地图,同时当用户点击地图上的某点时,记录下被点击点的经纬度数值,将其保存进intent中,随着startactivity(intent);而传递到另一个activity中,注意,这个经纬度坐标是从LatLng对象中取出的,但是该对象中默认经纬度都是用double变量存储的;

另外,我在MainActivity中写了一个init()的方法,即每次创建该activity的时候就在数据库中存储的经纬度坐标上标记一个“marker”,而用户即可通过这个marker找到之前基于这个点保存的数据。

EditActivity:接收MainActivity传过来的intent,并从中取出经纬度数值,加上当前activity中得到的用户输入的信息,一起保存进sqlite数据库中。

错误现象:

每次执行MainActivity中的init()方法的时候,我都会首先从数据库中取出数据,因为在数据库中我把经纬度都设置为varchar类型,而LatLng对象中的经纬度是double型,我就必须得先把取出的数据转换成double型,而每当这时候程序就会报错,而且根据报错信息发现,从数据库中取出的经纬度数据都是null!这让我百思不得其解,一直纠结了两天没有发现问题……

init方法代码如下:

private void init(){
		List<Item> items=new ArrayList<Item>();
		System.out.println(getIntent().getStringExtra("password"));
		items=getData(getIntent().getStringExtra("password"));
		for(Item i:items){
			String latitude = i.getLatitude();
			String longitude = i.getLongitude();
			System.out.println("username"+i.getUsername());
			System.out.println("password"+i.getPassword());
			System.out.println("标记!----->latitude:"+latitude+"   longitude:"+longitude);
			System.out.println("内容:------>"+i.getContent());
			if(latitude != null && !"".equals(latitude.trim())&&longitude != null && !"".equals(longitude.trim())){
				double dlatitude = Double.parseDouble(latitude);
				double dlongitude = Double.parseDouble(longitude);
				LatLng point = new LatLng(dlatitude, dlongitude);  
				//构建Marker图标  
				BitmapDescriptor bitmap = BitmapDescriptorFactory  
				    .fromResource(R.drawable.icon_marka);  
				//构建MarkerOption,用于在地图上添加Marker  
				OverlayOptions option = new MarkerOptions()  
				    .position(point)  
				    .icon(bitmap);  
				//在地图上添加Marker,并显示  
				mBaiduMap.addOverlay(option);
			}

排错结果:

后来我在检查代码的时候无意中发现,在我从LatLng对象中取出经纬度数值之后根本没有进行类型转换,将其转换为String类型,相反,我直接将double型的数据保存进了intent对象中,而在EditActivity中依旧没有发现这个问题,最后把double型的数据保存进了varchar类型的字段中,于是造成了这个问题。

这中间,最坑爹的部分在于,当我把double型数据保存进varchar字段的时候,程序完全没有报错,而是直接保存了一个Null进去!于是导致这个问题非常地隐蔽,让我费了好大力气才发现。

人家都说程序员是最耐心,最细致的一类人,看来我还不够细心,还有待修炼啊,加油~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值