尝试调用虚方法。应用程序显示位置

时间:2014-07-27 10:00:43

标签: java android geolocation

我正在尝试创建一个显示设备当前(或最后已知位置)的Android应用程序。 这是logcat中显示的错误:

  

07-27 14:47:53.766:E / AndroidRuntime(28080):引起:   java.lang.NullPointerException:尝试调用虚方法   '对象的'double android.location.Location.getLatitude()'   参考

这是我的java代码:

package com.example.autosilence;

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

    TextView lat = (TextView)findViewById(R.id.lat);
    TextView lon = (TextView)findViewById(R.id.lon);
    int b,c;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

        Location lastLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if (lastLocation != null)
        {
            lat.setText(Double.toString(lastLocation.getLatitude()));
            lon.setText(Double.toString(lastLocation.getLongitude()));
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

我已经允许在android清单中获得精细和粗略位置的权限。 为什么会这样?

2 个答案:

答案 0 :(得分:1)

这可能无法解决问题,但您在布局膨胀之前找到了视图。移动

TextView lat = (TextView)findViewById(R.id.lat);
TextView lon = (TextView)findViewById(R.id.lon);
onCreate之后

setContentView()的内部。

答案 1 :(得分:1)

您是否使用模拟器或设备来测试代码?

仿真器无法检测到您当前的位置并在初始corrdinates中返回null,因为您的系统不包含GPS。所以它返回一个nullPointerException。在运行位置服务代码之前,您需要在模拟器中配置GPS设置,或尝试在设备上运行它。