我问了一个类似的问题:Can't affect values to a simple Double[] table which is always null
我有一个包含NMEA帧的TXT文件。我检索$ GPGGA和$ GPRMC帧的纬度和经度。然后我将纬度和经度转换为十进制度。我的代码的第一个版本运行良好。然后我做了第二个,更有条理,但哪个不起作用。
以下是我的代码的第二个版本无效:
/**
* Updating position on Google Maps
* @param values
*/
public void showMyPosition(String values)
{
String[]selectedposition=values.split(",");
Double[]decimalcoordinates=new Double[2];
if(selectedposition.length>1 || selectedposition[0].equals("$GPGGA"))
{
int[]coordinatesposition=new int[]{2,4};
decimalcoordinates = convertNmeaToDecimal(selectedposition, coordinatesposition);
}
else if(selectedposition.length>1 || selectedposition[0].equals("$GPRMC"))
{
int[]coordinatesposition=new int[]{3,5};
decimalcoordinates = convertNmeaToDecimal(selectedposition, coordinatesposition);
}
LatLng position=new LatLng(decimalcoordinates[0],decimalcoordinates[1]);
googlemap=((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
marker=googlemap.addMarker(new MarkerOptions().title("You are here !").position(position));
googlemap.moveCamera(CameraUpdateFactory.newLatLngZoom(position, 19));
}
/**
* Convert NMEA coordinates into Decimal degrees coordinates.
* @param nmeaframes
* Contains all the NMEA frame
* @param coordinatesposition
* Contains the position of the latitude and longitude into nmeaframes[]
* @return decimalcoordinates*
*/
public Double[] convertNmeaToDecimal(String[]nmeaframes, int[]coordinatesposition)
{
Double nmeacoordinates=null;
Double[]decimalcoordinates=new Double[2];
for(int i=0; i<2; i++)
{
nmeacoordinates=Double.parseDouble(nmeaframes[coordinatesposition[i]]);
decimalcoordinates[i]=Math.floor(nmeacoordinates/100)+(nmeacoordinates-Math.floor(nmeacoordinates/100)*100)/60;
}
return decimalcoordinates;
}
这是我的LogCat:
12-17 14:47:03.476: E/AndroidRuntime(6769): FATAL EXCEPTION: main
12-17 14:47:03.476: E/AndroidRuntime(6769): java.lang.NumberFormatException: Invalid double: "A"
12-17 14:47:03.476: E/AndroidRuntime(6769): at java.lang.StringToReal.invalidReal(StringToReal.java:63)
我想我的代码就是这样,我再也看不到自己的错误了。它似乎与我的先例问题相同。但我无法解决它。
你能帮我吗?
编辑 - 这是一个非常粗心的错误......感谢Alex Walker帮助我指出我的错误
要提供原始功能,您需要将这两个
||
运算符更改为&&
。这样它将根据需要检查两种情况。也就是说,使用:
if(selectedposition.length>1 && selectedposition[0].equals("$GPGGA"))
和
else if(selectedposition.length>1 && selectedposition[0].equals("$GPRMC"))
答案 0 :(得分:2)
这些代码样本非常长且非常相似,因此很难确定实际问题是什么。
然而,一个明显的错误确实脱颖而出是在第2版的这些方面:
if(selectedposition.length>1 || selectedposition[0].equals("$GPGGA"))
和
else if(selectedposition.length>1 || selectedposition[0].equals("$GPRMC"))
根据你的第1版代码,算法应该检查selectedposition.length>1
,如果是,那就去尝试做一些事情。如果不是,请不要做任何事情。
但是在上面列出的版本2代码中,块
else if(selectedposition.length>1 || selectedposition[0].equals("$GPRMC"))
除非输入只有一个字符长,否则永远不会被调用。
要提供原始功能,您需要将这两个||
运算符更改为&&
。这样它将根据需要检查两种情况。也就是说,使用:
if(selectedposition.length>1 && selectedposition[0].equals("$GPGGA"))
和
else if(selectedposition.length>1 && selectedposition[0].equals("$GPRMC"))