0

私はそれについて同様の質問をしました:常にnullである単純なDouble []テーブルの値に影響を与えることはできません

NMEA フレームを含む TXT ファイルがあります。$GPGGA および $GPRMC フレームの緯度と経度を取得します。次に、緯度と経度を 10 進数に変換します。私のコードの最初のバージョンはうまく機能しています。次に、より構造化された 2 番目のものを作成しましたが、これは機能しません。

動作しないコードの 2 番目のバージョンは次のとおりです。

/**
 * 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"))
4

1 に答える 1

2

これらのコード サンプルは非常に長く、非常によく似ているため、実際の問題を特定するのは非常に困難です。

ただし、バージョン 2 の次の行には、明らかな間違いが 1 つあります。

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"))

入力が正確に 1 文字の長さでない限り、呼び出されることはありません。

||元の機能を提供するには、これらの演算子を両方とも に変更する必要があります&&。そうすれば、必要に応じて両方のケースがチェックされます。つまり、次を使用します。

if(selectedposition.length>1 && selectedposition[0].equals("$GPGGA"))

else if(selectedposition.length>1 && selectedposition[0].equals("$GPRMC"))
于 2013-12-17T14:24:46.623 に答える