0

私は理解できない問題で立ち往生しています。私はたくさんの方法を試しましたが、どれもうまくいかない理由を私に教えてくれません。

問題

アプリケーションを実行するたびに、クラッシュします。43行目で//ここでクラッシュします。

私がやろうとしているのは、10進入力の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

これが必要です

アプリが起動したら、緯度と経度を取得して、現在の場所の緯度と経度の値を使用して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

あなたのスタックトレースから、正しいIDを使用していないため、LatTextはnullであると言えます。

LatText = (EditText) findViewById(R.id.lat);あなたのxmlレイアウトで定義されているように使用してみてください


古い答え

私はあなたがここで逆のことをしていると思います:

  1. LocationManager.requestLocationUpdates()時間がかかる場合があるため、バックグラウンド スレッドで実行する必要があります。
  2. バックグラウンド スレッドからのアクティビティの開始/終了、または UI の変更は安全ではありません。そのためにはUIスレッドを使用する必要があります

バックグラウンド スレッドを使用して場所をリクエストしrunOnUiThread、TextView を更新するか、新しいアクティビティを開始するために使用できます。

重要:アクティビティの onPause メソッドでスレッドを停止してください。

于 2013-02-11T11:03:57.537 に答える