Toast.makeText 程序崩溃

子线程中使用Toast
本文介绍了如何在Android子线程中正确显示Toast消息,通过准备Looper并进入消息循环实现,避免程序崩溃。
1.在子线程Toast.makeText 程序崩溃 加上Looper 即可


Looper.prepare();
Toast.makeText(getActivity(), jiegou, Toast.LENGTH_LONG).show();	
 Looper.loop();

package com.example.myapplication; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public class UpdatePwdActivity extends AppCompatActivity { private EditText et_new_password; private EditText et_confirm_password; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); et_new_password = findViewById(R.id.et_new_password); et_confirm_password = findViewById(R.id.et_confirm_password); findViewById(R.id.btn_update_password).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String new_password = et_new_password.getText().toString(); String confirm_password = et_confirm_password.getText().toString(); if (TextUtils.isEmpty(new_password) || TextUtils.isEmpty(confirm_password)) { Toast.makeText(UpdatePwdActivity.this, "信息不能为空", Toast.LENGTH_SHORT).show(); }else if (!new_password.equals(confirm_password)) { Toast.makeText(UpdatePwdActivity.this, "新密码与确认密码不一致", Toast.LENGTH_SHORT).show(); }else { UserInfo userInfo = UserInfo.getUserInfo(); if (null!=userInfo) { int row = UserDbHelper.getInstance(UpdatePwdActivity.this).updatePwd(userInfo.getUsername(),new_password); if (row > 0) { Toast.makeText(UpdatePwdActivity.this, "修改密码成功,请重新登录", Toast.LENGTH_SHORT).show(); //回传的时候要用 startActivityForResult启动一个页面,并且在该页面设置 setResult(1000); finish(); }else { Toast.makeText(UpdatePwdActivity.this, "修改失败", Toast.LENGTH_SHORT).show(); } } } } }); //返回 findViewById(R.id.toolbar).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); } } 在Android Studio中代码处getUserInfo报红,正确的怎么写
06-24
那现在,我还是有搜索问题。你提供的代码,好像搜索之后程序会卡顿。上文提到了那个RoutePlanActivity,你给代码package com.example.bus; import android.os.Bundle; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import com.amap.api.maps.AMap; import com.amap.api.maps.MapView; import com.amap.api.services.core.LatLonPoint; import com.amap.api.services.route.BusPath; import com.amap.api.services.route.BusRouteResult; import com.amap.api.services.route.DriveRouteResult; import com.amap.api.services.route.RideRouteResult; import com.amap.api.services.route.RouteResult; import com.amap.api.services.route.RouteSearch; import com.amap.api.services.route.WalkRouteResult; public class RoutePlanActivity extends AppCompatActivity implements RouteSearch.OnRouteSearchListener { private MapView mapView; private AMap aMap; private RouteSearch routeSearch; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_route_plan); mapView = findViewById(R.id.map_view); mapView.onCreate(savedInstanceState); if (aMap == null) aMap = mapView.getMap(); try { routeSearch = new RouteSearch(this); routeSearch.setRouteSearchListener(this); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "路线服务初始化失败,请检查依赖", Toast.LENGTH_LONG).show(); finish(); return; } parseIntentAndStartSearch(); } private void parseIntentAndStartSearch() { String startMode = getIntent().getStringExtra("start_mode"); double targetLat = getIntent().getDoubleExtra("target_lat", 0); double targetLng = getIntent().getDoubleExtra("target_lng", 0); if (targetLat == 0 || targetLng == 0) { Toast.makeText(this, "目标位置无效", Toast.LENGTH_SHORT).show(); finish(); return; } // 构造目标点 com.amap.api.services.core.LatLonPoint startPoint, targetPoint; if ("my_location".equals(startMode)) { // TODO: 实际应使用定位获取“我的位置” // 这里模拟北京某坐标 startPoint = new com.amap.api.services.core.LatLonPoint(39.909186, 116.397411); } else { double startLat = getIntent().getDoubleExtra("start_lat", 0); double startLng = getIntent().getDoubleExtra("start_lng", 0); startPoint = new com.amap.api.services.core.LatLonPoint(startLat, startLng); } targetPoint = new com.amap.api.services.core.LatLonPoint(targetLat, targetLng); RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(startPoint, targetPoint); RouteSearch.BusRouteQuery query = new RouteSearch.BusRouteQuery(fromAndTo, RouteSearch.BUS_DEFAULT, "", 0); // ✅ 第2步:加 try-catch 防止 Unhandled Exception try { routeSearch.calculateBusRouteAsyn(query); } catch (Exception e) { Toast.makeText(this, "路线查询启动失败", Toast.LENGTH_SHORT).show(); } } @Override public void onBusRouteSearched(BusRouteResult result, int rCode) { if (rCode == 1000 && result != null && result.getPaths() != null && !result.getPaths().isEmpty()) { BusPath best = result.getPaths().get(0); Toast.makeText(this, "推荐路线:" + best.getDuration() / 60 + "分钟,步行" + best.getWalkDistance() + "米", Toast.LENGTH_LONG).show(); // TODO: 绘制路线(后续可加 Polyline 或 RouteOverlay) } else { Toast.makeText(this, "未找到公交路线", Toast.LENGTH_SHORT).show(); } } @Override public void onDriveRouteSearched(DriveRouteResult result, int rCode) { // 空实现(原已有) } // ✅ 第3步:新增空实现方法 - onWalkRouteSearched @Override public void onWalkRouteSearched(WalkRouteResult result, int rCode) { // 空实现 } // ✅ 第3步:新增空实现方法 - onRideRouteSearched @Override public void onRideRouteSearched(RideRouteResult result, int rCode) { // 空实现 } // ---------------- 生命周期方法 ---------------- @Override protected void onResume() { mapView.onResume(); super.onResume(); } @Override protected void onPause() { mapView.onPause(); super.onPause(); } @Override protected void onDestroy() { mapView.onDestroy(); super.onDestroy(); } @Override protected void onSaveInstanceState(Bundle outState) { mapView.onSaveInstanceState(outState); super.onSaveInstanceState(outState); } }
最新发布
11-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值