错误原因:
Android中不能在子线程中来刷新UI线程
解决方法:
//使用runOnUiThread方法刷新UI
runOnUiThread(new Runnable() {
@Override
public void run() {
//刷新UI
}
});
常见问题:
调用 LocationManager 获取当前位置信息并实时上传时,出现该错误的原因是 LocationManager 需要在主线程中使用。推荐如下方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//上传位置信息
Button btnUploadGPS = (Button)findViewById(R.id.btn_upload_gps);
if (btnUploadGPS != null){
btnUploadGPS .setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
uploadGPS();
}
});
}
}
private void uploadGPS(){
final LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
2000,
(float) 0.01,
new LocationListener() {
@Override
public void onLocationChanged(Location location) {
asyncUploadGPS(location);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
asyncUploadGPS(locationManager.getLastKnownLocation(provider));
}
@Override
public void onProviderDisabled(String provider) {
asyncUploadGPS(null);
}
}
);
}
private void asyncUploadGPS(final Location currentLocation) {
new Thread(new Runnable() {
@Override
public void run() {
//上传位置信息
}
}).start();
}