0

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

问题

每次我想运行应用程序时,它都会崩溃。在第 43 行,它显示 // Crash here。

我想要做的是,我有 2 个带有十进制输入的 textView。

对不起,我复制了错误的 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;
}
}    

日志

  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

这是需要的

当应用程序启动时,我希望它获取纬度和经度,并将其放入带有当前位置 lat 和 long 值的 textView 中。

4

2 回答 2

0

代替

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

LatText.setText(String.valueOf(currentLat));
LongText.setText(String.valueOf(currentLong));
于 2013-02-11T12:35:05.810 回答
-1

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

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


旧答案

我认为你在这里做事倒退:

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

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

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

于 2013-02-11T11:03:57.537 回答