0

私は単にユーザーの場所を地図上に表示しようとしています。私はAndroid開発に非常に慣れていませんが、Javaの基本を持っています。

基本的に、Eclipseからモックデータ(lang / long co-ords)を送信しています。このデータが送信されるとすぐに、アプリケーションが次のようにクラッシュします。

    04-07 21:07:52.252: E/AndroidRuntime(639): FATAL EXCEPTION: main
04-07 21:07:52.252: E/AndroidRuntime(639): java.lang.NullPointerException
04-07 21:07:52.252: E/AndroidRuntime(639):  at com.herghost.bmad.BMAD$1.onLocationChanged(BMAD.java:60)
04-07 21:07:52.252: E/AndroidRuntime(639):  at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:227)
04-07 21:07:52.252: E/AndroidRuntime(639):  at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:160)
04-07 21:07:52.252: E/AndroidRuntime(639):  at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:176)
04-07 21:07:52.252: E/AndroidRuntime(639):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-07 21:07:52.252: E/AndroidRuntime(639):  at android.os.Looper.loop(Looper.java:137)
04-07 21:07:52.252: E/AndroidRuntime(639):  at android.app.ActivityThread.main(ActivityThread.java:4424)
04-07 21:07:52.252: E/AndroidRuntime(639):  at java.lang.reflect.Method.invokeNative(Native Method)
04-07 21:07:52.252: E/AndroidRuntime(639):  at java.lang.reflect.Method.invoke(Method.java:511)
04-07 21:07:52.252: E/AndroidRuntime(639):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-07 21:07:52.252: E/AndroidRuntime(639):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-07 21:07:52.252: E/AndroidRuntime(639):  at dalvik.system.NativeStart.main(Native Method)

私のアプリケーションのコードは次のとおりです。

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class BMAD extends Activity {


    private LocationManager locmgr = null;
    private TextView mytext;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);



        locmgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        final Button button = (Button)
        findViewById(R.id.launchmap);
        button.setOnClickListener(new Button.OnClickListener() 
        {
            public void onClick(View view) 
                {
                    try 
                        {
                            LocationManager address = locmgr;
                            Intent geoIntent = new Intent
                            (android.content.Intent.ACTION_VIEW,
                            Uri.parse("geo:0,0?q=" + address));
                            startActivity(geoIntent);
                        } 
                    catch (Exception e) 
                        {

                        }
                }


        });}
//Start a location listener
LocationListener onLocationChange=new LocationListener() {
    public void onLocationChanged(Location loc) {
        //sets and displays the lat/long when a location is provided
        String latlong = "Lat: " + loc.getLatitude() + " Long: " + loc.getLongitude();   
        mytext.setText(latlong);
    }

    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
    }
};

//pauses listener while app is inactive
@Override
public void onPause() {
    super.onPause();
    locmgr.removeUpdates(onLocationChange);
}

//reactivates listener when app is resumed
@Override
public void onResume() {
    super.onResume();
    locmgr.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,10000.0f,onLocationChange);
}
}

誰かが私をこれを引き起こしているものに導くことができますか?

4

2 に答える 2

0

mytext変数を初期化しません。コードの60行目にNPEが発生しますmytext.setText(latlong);

mytext = findViewById(R.id.mytext);あなたはあなたのonCreate()方法のように何かをするべきです。

于 2012-04-07T21:26:19.317 に答える
0

うーん....UIにMapViewと呼ばれるオブジェクトが必要です.... mapView = (MapView) findViewById(R.id.mapview); しかし、GeoPossitionを使用するには、これはより簡単で、コンパスも使用できます:)

/**************** onCreate *******************/

private MyLocationOverlay myLocationOverlay = null;

myLocationOverlay = new MyLocationOverlay(this, mapView);
try {
    myLocationOverlay.enableCompass();
    myLocationOverlay.enableMyLocation();
} catch (Exception e) {
    // TODO: handle exception
    Log.e("Activar brujula, localizacion LocationOverlay", e.getMessage());
}
mapView.getOverlays().add(myLocationOverlay);

/********************** onCreate end ***********************/

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    // activamos la brujula y la localizacion
    myLocationOverlay.enableMyLocation();
    myLocationOverlay.enableCompass();
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    // desactivamos la brujula y la localizacion
    myLocationOverlay.disableMyLocation();
    myLocationOverlay.disableCompass();
}
/*//////////////////////////////////////////////////////////////////////////*/

乾杯!、

例;)|| / 例MapViewプロジェクト

于 2012-04-07T21:26:24.637 に答える