2012-01-09 13 views
2
package com.competitivegamingaudio; 
import android.app.Activity; 
import android.content.Context; 
import android.location.*; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.*; 
import com.google.android.maps.*;; 

public class FindMyFriendsActivity extends Activity { 


private static final String TAG = "FindMyFriendsActivity"; 
public TextView LocationLabel; 
public TextView DistanceLabel; 
public MapView myMapView; 
public Location oldlocation; 
public Location currentlocation; 

@Override 
public void onResume() 
    { 
    super.onResume(); 
    LocationManager locationManager=(LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,locationListener); 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener); 
    } 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    LocationLabel=(TextView) findViewById(R.id.LocationLabel); 
    DistanceLabel=(TextView)findViewById(R.id.DistanceLabel); 



} 

LocationListener locationListener =new LocationListener() 
{ 
public void onLocationChanged (Location location) 
    { 
    currentlocation=new Location(location); 
    LocationLabel.setText(location.toString()); 
    oldlocation=new Location(location); 
    DistanceLabel.setText("Distance: "+calculatedistance(currentlocation,oldlocation)); 

    } 
public String calculatedistance(Location a, Location b) 
    { 
    a.distanceTo(b); 
    return ""+a; 
    } 
public void onStatusChanged(String provider, int status, Bundle extras) 
    {} 
public void onProviderEnabled(String provider) 
    { 

    } 
public void onProviderDisabled(String provider) 
{} 

}; 

} 

このコードが正しく機能するようになっています。私は2つの場所間の距離を計算できるようにしたい。私がLocationLabel.setText(location.toString());を実行したときに、nullポインタの例外を受けなくても正しく動作するため、onLocationChangedメソッドに渡される最初の場所が正常に動作していることがわかります。しかし、calculatedistanceメソッドが49行目で呼び出された場合、a.distanceTo(b);行は54行目で失敗します。なぜdistanceToメソッドが失敗し続けるのでしょうか?Androidの場所DistanceTo null

エラーメッセージ:

01-09 20:11:58.085: ERROR/AndroidRuntime(9716): java.lang.NullPointerException 
01-09 20:11:58.085: ERROR/AndroidRuntime(9716):  at com.competitivegamingaudio.FindMyFriendsActivity$1.onLocationChanged(FindMyFriendsActivity.java:47) 
01-09 20:11:58.085: ERROR/AndroidRuntime(9716):  at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:227) 
01-09 20:11:58.085: ERROR/AndroidRuntime(9716):  at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:160) 
01-09 20:11:58.085: ERROR/AndroidRuntime(9716):  at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:176) 
01-09 20:11:58.085: ERROR/AndroidRuntime(9716):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-09 20:11:58.085: ERROR/AndroidRuntime(9716):  at android.os.Looper.loop(Looper.java:130) 
01-09 20:11:58.085: ERROR/AndroidRuntime(9716):  at android.app.ActivityThread.main(ActivityThread.java:3821) 
01-09 20:11:58.085: ERROR/AndroidRuntime(9716):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-09 20:11:58.085: ERROR/AndroidRuntime(9716):  at java.lang.reflect.Method.invoke(Method.java:507) 
01-09 20:11:58.085: ERROR/AndroidRuntime(9716):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
01-09 20:11:58.085: ERROR/AndroidRuntime(9716):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
01-09 20:11:58.085: ERROR/AndroidRuntime(9716):  at dalvik.system.NativeStart.main(Native Method) 

はmain.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<TextView 
android:id="@+id/LocationLabel" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/hello" 
/> 
<TextView 
    android:id="@+id/DistanceLabel" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/hello" 
/> 
</LinearLayout> 
+0

コードでは、以前の場所と現在の場所は同じですか? – frayab

+0

例外を示すlogcatを投稿する – Squonk

+0

01-09 18:42:06.342:ERROR/AndroidRuntime(7891):致命的な例外:メイン 01-09 18:42:06.342:ERROR/AndroidRuntime(7891):java.lang.NullPointerException 01-09 18:42:06.342:エラー/ AndroidRuntime(7891):com.competitivegamingaudio.FindMyFriendsActivity $ 1.onLocationChanged(FindMyFriendsActivity.java:49) 01-09 18:42:06.342:ERROR/AndroidRuntime(7891): android.location.LocationManager $ ListenerTransport._handleMessage(LocationManager.java:227) など... – mason

答えて

1

を試してみてください。すべての文字は同じように見えますが、固定されています。おそらく16進エディターでそれを見ると助けになるかもしれませんが、今のところ私はうまくいきました。ありがとうMisterSquonk。

1

OK、そこに私はあなたのコードについて変更したいことがたくさんがありますが、ここの場所ではありません。あなたの問題を解決しようとすることは、私のJavaコードからDistanceLabelをコピーし、main.xmlで同様DistanceLabelの上に貼り付けることによって解決この...

// package and imports here 

public class FindMyFriendsActivity extends Activity { 

    // TAG, TextViews, MapView, Locations as before but add 
    // LocationManager and LocationListener here as below... 
    LocationManager locationManager = null; 
    LocationListener locationListener = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     LocationLabel = (TextView)findViewById(R.id.LocationLabel); 
     DistanceLabel = (TextView)findViewById(R.id.DistanceLabel); 

     locationManager=(LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 

     locationListener = new LocationListener() { 
      // Put LocationListener methods here 
     } 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
    } 
} 
+0

いいえ、それは動作しませんでした。問題はlocationManagerまたはlocationListenerがnullではないということではありません(そうではありません)。 oldlocationがnullであることがわかります。 – mason

+0

問題は、logcatを投稿したときに数行しか投稿されず、本当に役に立たない「etc」で終わったときです。 「原因」を示すビットを投稿してください – Squonk

+0

私が 'DistanceLabel.setText(" Distance: "+ computedistance(currentlocation、oldlocation));をコメントアウトすると、プログラムは正常に動作します。しかし、まだ2つの場所の間の距離を得る全体と私を助けていない事。 – mason