Android Расположение Расстояние до нуля - PullRequest
2 голосов
/ 10 января 2012
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)
{}

};

}

У меня проблемы с настройкой кода. Я хочу иметь возможность рассчитать расстояние между двумя местоположениями. Начальное местоположение, которое передается методу onLocationChanged, работает (что доказывает, что у меня правильные условия), потому что, когда я выполняю LocationLabel.setText(location.toString());, это работает правильно, не получая никаких исключений нулевого указателя. Однако, когда метод calculatedistance вызывается в строке 49, строка a.distanceTo(b); завершается ошибкой в ​​строке 54. Есть идеи, почему метод distanceTo продолжает давать сбой?

Сообщение об ошибке:

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>

Ответы [ 2 ]

1 голос
/ 10 января 2012

Решено, скопировав DistanceLabel из моего Java-кода и вставив его поверх аналогичного DistanceLabel в main.xml.Все персонажи выглядят одинаково, но это исправлено.Возможно, просмотр его в шестнадцатеричном редакторе помог бы, но сейчас я просто рад, что он работает.Спасибо MisterSquonk.

1 голос
/ 10 января 2012

ОК, я бы многое изменил в вашем коде, но здесь не место.Чтобы попытаться решить вашу проблему попробуйте это ...

// 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);
    }
}
...