Can't create handler inside thread that has not called Looper.prepare() 异常
16lz
2021-01-26
错误原因:
Android中不能在子线程中来刷新UI线程
解决方法:
//使用runOnUiThread方法刷新UIrunOnUiThread(new Runnable() { @Override public void run() { //刷新UI }});
常见问题:
调用 LocationManager 获取当前位置信息并实时上传时,出现该错误的原因是 LocationManager 需要在主线程中使用。推荐如下方法:
@Overrideprotected 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();}
更多相关文章
- 解决Eclipse提示错误:Your project contains error(s)
- Android(安卓)focus search returned a view that wasn't able t
- Android存储访问错误 open failed: EACCES (Permission denied)
- dex2oat的原理及慢的原因
- Android(安卓)ListView 实现 GridView
- Error:(22, 0) Could not find method android()
- Android(安卓)Studio 安装完成后,遇到的问题记录。
- android右上方不显示3个点的菜单的解决方法
- Android(安卓)JNI 编译正确 但是提示程序有错误无法运行 而且还