0

我尝试为我的学习创建一个应用程序,它是一个跟踪运动。

当我发送新的本地化时,我的应用程序由于此错误而崩溃:

03-18 18:44:34.662: E/AndroidRuntime(1085): FATAL EXCEPTION: main
03-18 18:44:34.662: E/AndroidRuntime(1085): java.lang.NullPointerException
03-18 18:44:34.662: E/AndroidRuntime(1085): at android.app.Activity.findViewById(Activity.java:1839)
03-18 18:44:34.662: E/AndroidRuntime(1085): at fr.polytech.trackersportif.GPSData.onLocationChanged(GPSData.java:28)
03-18 18:44:34.662: E/AndroidRuntime(1085): at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:255)
03-18 18:44:34.662: E/AndroidRuntime(1085): at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:184)
03-18 18:44:34.662: E/AndroidRuntime(1085): at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:200)
03-18 18:44:34.662: E/AndroidRuntime(1085): at android.os.Handler.dispatchMessage(Handler.java:99)
03-18 18:44:34.662: E/AndroidRuntime(1085): at android.os.Looper.loop(Looper.java:137)
03-18 18:44:34.662: E/AndroidRuntime(1085): at android.app.ActivityThread.main(ActivityThread.java:5039)
03-18 18:44:34.662: E/AndroidRuntime(1085): at java.lang.reflect.Method.invokeNative(Native Method)
03-18 18:44:34.662: E/AndroidRuntime(1085): at java.lang.reflect.Method.invoke(Method.java:511)
03-18 18:44:34.662: E/AndroidRuntime(1085): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-18 18:44:34.662: E/AndroidRuntime(1085): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-18 18:44:34.662: E/AndroidRuntime(1085): at dalvik.system.NativeStart.main(Native Method)

我的主要活动是:

locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationListener = new GPSData();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, locationListener);

完成我的课程(GPSData)是:

public class GPSData extends Activity implements LocationListener{

 TextView textLong, textLat;



protected void onCreate(Bundle savedInstanceState) {
    //super.onCreate(savedInstanceState);     
    setContentView(R.layout.page_accueil);  //page_acceuil is the layout where are the two textview that I want set text  
}

@Override
public void onLocationChanged(Location location) {

     textLong = (TextView) findViewById(R.id.textView1);
     textLat = (TextView) findViewById(R.id.textView3);

    textLong.setText(String.valueOf(location.getLongitude()));
    textLat.setText(String.valueOf(location.getLatitude()));        
}

两天后我尝试了不同的事情,但我一次又一次地遇到这个错误。

你能帮我吗?

4

3 回答 3

0

调用new不是启动Activity. 你NullPointerException最有可能被抛出:

textLong.setText(String.valueOf(location.getLongitude()));

Activity这是因为通过调用创建一个新的new不会触发该onCreate方法。因此,您的GPSData班级永远不会有视图集,因为setContentView没有被调用。这意味着使用您自己的视图 ID 之一调用findViewById将始终返回null

我建议不要在你的课堂上设置你LocationListenerMainActivity,而是在你的GPSData课堂上进行。为此,您必须进行以下更改:

主要活动:

Intent intent = new Intent(this, GPSData.class);
startActivity(intent);

GPS数据:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
    setContentView(R.layout.page_accueil);

    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, this);
}

您应该能够GPSData独自离开课堂的其余部分。仅更改onCreate方法以匹配此方法。

这一切都假设你真的想像你的代码一样GPSData独立。Activity如果您不希望它是一个单独的,Activity那么我建议您创建GPSData一个私有内部类,并使其Activity不像 BrianPlummer 建议的那样扩展。在这种情况下,您的GPSData课程将如下所示:

private class GPSData implements LocationListener {

    TextView textLong;
    TextView textLat;

    public GPSData() {
        textLong = (TextView) findViewById(R.id.textView1);
        textLat = (TextView) findViewById(R.id.textView3);
    }

    @Override
    public void onLocationChanged(Location location) {    
        textLong.setText(String.valueOf(location.getLongitude()));
        textLat.setText(String.valueOf(location.getLatitude()));        
    }
}
于 2013-03-18T19:09:37.630 回答
0

telnet如果不使用和geo fix lat coordinate long coordinate命令指定经纬度坐标,则无法在模拟器中测试基于地理位置的应用程序。

于 2013-03-18T19:03:23.210 回答
0

您必须将 GPSData 放入 mainactivity。您只能访问 (TextView) findViewById(R.id.textView1); 在 MainActivity

和 MainActivity.this.findViewById(R.id.textView1);

于 2013-03-18T19:04:27.287 回答