2013-02-11 42 views
0

我遇到了一个问题,我无法弄清楚。我已经尝试了很多方法,但没有一个能让我明白它们为什么不起作用。GPS onCreate问题

问题

每次我想要运行的应用程序,它的崩溃。在第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 

这是需要

当应用程序启动,我希望它获得的经度和纬度,并把它的TextView与当前位置经纬度和长期价值。

+0

您可以发布您的错误的堆栈跟踪? – nicopico 2013-02-11 12:34:17

+0

这里是日志 – Tirolel 2013-02-11 13:03:05

回答

-1

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

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


OLD ANSWER

我认为你是落后在这里做的事情:

  1. LocationManager.requestLocationUpdates()可能需要很长的时间, 它应该在后台线程中完成。
  2. 开始/结束活动或从后台线程修改UI是不安全的。您应该使用该UI线程

您可以使用后台线程来请求位置,并使用runOnUiThread更新您的TextViews或开始新的活动。

重要提示:确保停止活动的onPause方法中的线程!

+0

这个答案是错的。你可以从主线程调用requestLocationUpdates,它根本没有任何阻塞,因为它有一个触发回调的位置onLocationChanged() – NickT 2013-02-11 11:13:34

+0

好吧,呃任何人都可以引导我解决这个问题? – Tirolel 2013-02-11 11:52:47

+0

@NickT似乎你是对的,不知道为什么我认为你应该从后台线程调用它... – nicopico 2013-02-11 12:34:00

0

更换

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

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