GPS onCreate问题

时间:2013-02-11 10:50:27

标签: android android-activity gps

我遇到了一个我无法弄清楚的问题。我尝试了很多方法,但没有一个能让我理解为什么它们不起作用。

问题

每次我想运行应用程序时,都会崩溃。在第43行,它说//崩溃在这里。

我要做的是,我有2个带小数输入的textView。

Sry我复制了错误的xml,但它仍然是同一个问题

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<EditText
android:id="@+id/lat"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="My text edit this." >
    <requestFocus />
</EditText>

<EditText
android:id="@+id/lng"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="My text edit this."
 />

这是主要

public class Starter extends Activity implements LocationListener {
protected boolean _active = true;
AlertDialog alertDialog;
int progress = 0;
Location_Finder loc;
protected       int _splashTime = 2000;   
private         Thread splashTread;
public LocationManager lm;

EditText LatText = null;
EditText LongText = null;

double  latitude = 18.9599990845; 
double  longitude = 72.819999694;

public void onCreate(Bundle paramBundle)
    {
        super.onCreate(paramBundle);
        setContentView(R.layout.starter);

        lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 500.0f, this);

        LatText = (EditText) findViewById(R.id.text_lat);
        LongText = (EditText) findViewById(R.id.text_lng);

        double currentLat = latitude;
        double currentLong = longitude;

                    //Crash here 
        LatText.setText(Double.toString(currentLat));
        LongText.setText(Double.toString(currentLong));

        splashTread = new Thread() {
            @Override
            public void run() {
                try {                   
                    synchronized(this) {
                        wait(_splashTime);
                    }                   
                } catch(InterruptedException e) {
                    System.out.println("EXc=" + e);
                } 
                finally {              

                    startActivity(new Intent(Starter.this, LocationUpdater.class ));                 
                    //stop();
                    finish();
                }
            }
        };      
        splashTread.start();

        }

/* This method is called when use position will get changed */
public void onLocationChanged(Location loc) {
    if (loc != null) {

    double lat = loc.getLatitude();
    double lng = loc.getLongitude();

    String lat_text = ""+ lat + "";
    String long_text = ""+ lng + "";

    LatText.setText(lat_text);
    LongText.setText(long_text);

    }
}



public void onProviderDisabled(String provider) {
    // required for interface, not used
}

public void onProviderEnabled(String provider) {
    // required for interface, not used
}

public void onStatusChanged(String provider, int status, Bundle extras) {
    // required for interface, not used
}

protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}
}    

LOG

  02-11 13:59:16.499: D/AndroidRuntime(10702): Shutting down VM
  02-11 13:59:16.499: W/dalvikvm(10702): threadid=1: thread exiting with uncaught             exception (group=0x41f592a0)
  02-11 13:59:16.504: E/AndroidRuntime(10702): FATAL EXCEPTION: main
  02-11 13:59:16.504: E/AndroidRuntime(10702): java.lang.RuntimeException: Unable to       start activity ComponentInfo{com.androidhive.jsonparsing/com.androidhive.jsonparsing.Starter}: java.lang.NullPointerException
  02-11 13:59:16.504: E/AndroidRuntime(10702):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
  02-11 13:59:16.504: E/AndroidRuntime(10702):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
  02-11 13:59:16.504: E/AndroidRuntime(10702):  at android.app.ActivityThread.access$600(ActivityThread.java:140)
  02-11 13:59:16.504: E/AndroidRuntime(10702):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
  02-11 13:59:16.504: E/AndroidRuntime(10702):  at android.os.Handler.dispatchMessage(Handler.java:99)
  02-11 13:59:16.504: E/AndroidRuntime(10702):  at android.os.Looper.loop(Looper.java:137)
  02-11 13:59:16.504: E/AndroidRuntime(10702):  at android.app.ActivityThread.main(ActivityThread.java:4898)
  02-11 13:59:16.504: E/AndroidRuntime(10702):  at java.lang.reflect.Method.invokeNative(Native Method)
  02-11 13:59:16.504: E/AndroidRuntime(10702):  at java.lang.reflect.Method.invoke(Method.java:511)
  02-11 13:59:16.504: E/AndroidRuntime(10702):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
  02-11 13:59:16.504: E/AndroidRuntime(10702):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
  02-11 13:59:16.504: E/AndroidRuntime(10702):  at dalvik.system.NativeStart.main(Native Method)
  02-11 13:59:16.504: E/AndroidRuntime(10702): Caused by: java.lang.NullPointerException
  02-11 13:59:16.504: E/AndroidRuntime(10702):  at com.androidhive.jsonparsing.Starter.onCreate(Starter.java:44)
  02-11 13:59:16.504: E/AndroidRuntime(10702):  at android.app.Activity.performCreate(Activity.java:5206)
  02-11 13:59:16.504: E/AndroidRuntime(10702):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
  02-11 13:59:16.504: E/AndroidRuntime(10702):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
  02-11 13:59:16.504: E/AndroidRuntime(10702):  ... 11 more

这是必需的

当App启动时,我希望它获取纬度和经度并将其放在textView中,并使用当前位置lat和long值。

2 个答案:

答案 0 :(得分:0)

替换

LatText.setText(Double.toString(currentLat));
LongText.setText(Double.toString(currentLong));

LatText.setText(String.valueOf(currentLat));
LongText.setText(String.valueOf(currentLong));

答案 1 :(得分:-1)

从你的堆栈跟踪中,我会说LatText为null,因为你没有使用正确的id。

尝试使用xml布局中定义的LatText = (EditText) findViewById(R.id.lat);


OLD ANSWER

我认为你在向后做事:

  1. LocationManager.requestLocationUpdates()可能需要很长时间,应该在后台线程中完成。
  2. 启动/完成活动或从后台线程修改UI是不安全的。您应该使用UI线程
  3. 您可以使用后台线程来请求位置,并使用runOnUiThread更新TextView或开始新活动。

    重要提示:请务必在活动的onPause方法中停止该帖子!