onLocationChanged()从未在Android中调用

onLocationChanged()从未在Android中调用,android,gps,Android,Gps,我想通过单击按钮在tvLatitude和tvLongitude中显示纬度和经度(两者都是TextView)。它与我目前使用的代码不兼容,您可以在下面看到。问题是当控件到达stringlatitude=Double.toString(loc.getLatitude())时程序不幸停止。 有人能告诉我为什么loc.getLatitude和loc.getLatitude没有响应吗 package mk.bukhari.loctrack; import android.support.v7.app.A

我想通过单击按钮在
tvLatitude
tvLongitude
中显示纬度和经度(两者都是
TextView
)。它与我目前使用的代码不兼容,您可以在下面看到。问题是当控件到达string
latitude=Double.toString(loc.getLatitude())时程序不幸停止。
有人能告诉我为什么
loc.getLatitude
loc.getLatitude
没有响应吗

package mk.bukhari.loctrack;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Build;

public class MainActivity extends ActionBarActivity implements LocationListener {

    TextView tvLat, tvLon;
    Button btnLoc;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment()).commit();
            tvLat = (TextView) findViewById(R.id.tvLatitude);
            tvLon = (TextView) findViewById(R.id.tvLongitude);
            btnLoc = (Button) findViewById(R.id.btnLocation);

            final LocationManager locman = (LocationManager)
            getSystemService(LOCATION_SERVICE);
            locman.requestLocationUpdates("gps", 0, 0, this);

            btnLoc.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    Log.d("LocTrack", "Button Clicked");
                    Location loc = locman.getLastKnownLocation("gps");
                    onLocationChanged(loc);
                }
            });         
        }
    }
}

    @Override
    public void onLocationChanged(Location loc) {
        Log.d("LocTrack", "Entering onLacationChanged");
        String latitude = Double.toString(loc.getLatitude());
        String longitude = Double.toString(loc.getLongitude());
        Log.d("LocTrack", "Setting txt in tv");
        tvLat.setText(latitude);
        tvLon.setText(longitude);
    }

    @Override
    public void onProviderDisabled(String arg0) {}

    @Override
    public void onProviderEnabled(String arg0) {}

    @Override
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
}

好的,您的位置似乎返回null,请尝试以下方式更改代码:

@Override
public void onLocationChanged(Location loc) {
    Log.d("LocTrack", "Entering onLacationChanged");

    if(loc != null) { //Add this validation
        String latitude = Double.toString(loc.getLatitude());
        String longitude = Double.toString(loc.getLongitude());
        Log.d("LocTrack", "Setting txt in tv");
        tvLat.setText(latitude);
        tvLon.setText(longitude);
    } else    //If loc is null then inform the user
        Toast.makeText(this, "Unable to find your location, try again", Toast.LENGTH_SHORT).show();
}

似乎您使用了错误的提供商

试着打电话

locman.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0 , 0, this);
然后在
onClick(视图v)


直到日志d(“LocTrack”,“输入onLocationChanged”);该行程序按预期执行,输入onLocationChanged显示在logcat中,但应用程序在其旁边停止,并显示一个对话框,上面写着“不幸的是,LocTrak已停止”,您可以发布您的logcat吗?所以我们可以知道问题出在哪里抱歉bro图像没有上传指导我如何提供此图像不要发布文本图像。发布文本。实际上这是我的第一篇文章,所以stackflow不允许我发布图片。是的,兄弟,你是对的。else部分正在执行。现在我该怎么办CarlosJimenez loc返回null。请指导我现在该做什么。为什么loc是空检查教程。我相信这对你会有帮助的对不起,卡洛斯希门内斯,昨天我的网络连接因停电而中断了。顺便说一下,我读了你昨天告诉我的教程。我做了一些改变。它可以工作,但不能返回准确的位置。每次我点击按钮检索纬度和经度时,它都会返回一个变化的值CarlosJimenez,你们的教程非常有用,但我并没有得到准确的纬度和经度。请在这方面帮助我。我替换了代码,但是locman.requestLocationUpdates(LocationManager.GPS\U提供商);给出错误并建议在itI中添加参数我已经编辑了答案中的代码。请重试。如果答案有帮助,请不要忘记将其标记为答案。:)
Location loc = locman.getLastKnownLocation(LocationManager.GPS_PROVIDER);