AlertDialog.show方法异常引起App异常直接退出

youisbest7777 2017-04-18 06:16:35
源代码看下面,一运行到alertDialog.show();就退出了APP,也调试也找不到原因。
public class roomstatusActivity<pvivate> extends Activity implements OnClickListener{
private List<String> list = new ArrayList<String>();//创建一个String类型的数组列表。
private Spinner mySpinner; //http://blog.csdn.net/kongandroid/article/details/50081427
private ArrayAdapter<String> adapter;//创建一个数组适配器
private AlertDialog alertDialog;

private EditText numberNo;//输入编号implements OnClickListener

private Button btnocroom; // 声明查看更多按钮
private Button btnvacant; // 声明查看更多按钮
//private Button btnorder; // 声明查看更多按钮
private String roomstr;
String imeistr="";

public final static int SHOW_MESSAGE = 0x02;//Updatep定义一个params类
private ProgressDialog progressDialog;//Update创建一个进度条
private HashMap<String, Object> params;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.roomstatus);
onLoad();// 加载
}
// 加载
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
private void onLoad() {
list.add("c--Clean");
list.add("d--Dirty");

mySpinner = (Spinner) findViewById(R.id.roomStatuspinner);
numberNo=(EditText) findViewById(R.id.roomno);

btnocroom = (Button) findViewById(R.id.OccupiedClean);
btnvacant = (Button) findViewById(R.id.vacant);

params = new HashMap<String,Object>();//Update
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, list);//样式为原安卓里面有的android.R.layout.simple_spinner_item,让这个数组适配器装list内容。

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

mySpinner.setAdapter(adapter);
// 定义退出对话框 在这里定义的对话框
alertDialog = new AlertDialog.Builder(roomstatusActivity.this).setTitle("房态提交!").setPositiveButton("Submit", // OK按钮
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//new AsyncDataLoader(finishTaskCallback).execute();
}
}).setNegativeButton("Cancel", // 取消按钮
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
}).create();

btnocroom.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
roomstr=numberNo.getText().toString().trim()+"oc-";
if (roomstr.length()>3){
Tools.show(roomstatusActivity.this, "Message Btnocroom...!");
alertDialog.show(); 这里出错,一到这里就退出APP
// builder.show();
// networkroomstatus();
}else{
Tools.show(roomstatusActivity.this, "房间编号不能为空...!");
}
}
});

btnvacant.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
roomstr=numberNo.getText().toString().trim()+"vc-";
if (roomstr.length()>3){
alertDialog.show();这里出错,一到这里就退出APP
// networkroomstatus();
}else{
Tools.show(roomstatusActivity.this, "房间编号不能为空...!");
}
}
});
//spinner的选择事件触发
mySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {//选择item的选择点击监听事件
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
if (adapter.getItem(arg2).indexOf("-")>0){
roomstr=numberNo.getText().toString().trim()+adapter.getItem(arg2).substring(0,3);
if (roomstr.length()>3){
alertDialog.show();这里出错,一到这里就退出APP
// networkroomstatus();
}else{
Tools.show(roomstatusActivity.this, "房间编号不能为空...!");
}
}
}
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
// myTextView.setText("Nothing");
}
});
}
//数据、网络判断以及提交处理过程
private void networkroomstatus(){
if (!Tools.checkNetWork(roomstatusActivity.this)) {//Update添加对于网络是否连接的判断
Tools.show(roomstatusActivity.this, "当前没有网络,请确定网络是连接!");
finish();
} else {
//在这里添加弹出窗口进行提示是否要发送
if (roomstr.length()>2){
params.put("tel", Tools.getPhoneImei(roomstatusActivity.this));//Tools.getPhoneImei(ShowMessageActivity.this));// Update用户IMEI码添加电话号码
params.put("roomstatusstr", roomstr);
new AsyncDataLoader(RoomsatusCallback).execute();//Update如果网络正常调用下面的RegMobileCallBack方法
} else {
Tools.show(roomstatusActivity.this, "房间编号不能为空...!");
//ProgressDialog.show(roomstatusActivity.this,"提示" , "请填写房间号后再提交!");//(roomstatusActivity.this, "请填写房间号后再提交!");
}
}
}
//进行房态的修改
private AsyncDataLoader.Callback RoomsatusCallback = new AsyncDataLoader.Callback() {
boolean result;
//private ProgressDialog progressDialog;
public void onPrepare() {
Tools.show(roomstatusActivity.this, roomstr+"房间状态正在修改中....");//progressDialog = ProgressDialog.show(roomstatusActivity.this, "温馨提示", "房间状态正在修改中....");
result = false;
}
public void onStart() {
try {
result = ListManager.RoomStatus(params, handler);// 登录,这里要重写注册方法,这个是登陆的
} catch (Exception e) {
e.printStackTrace();
}
}
public void onFinish() {
// 处理结果
try {
if (result) {// 修改成功
//numberNo.setText(""); //roomstr="";
Intent intent = new Intent(roomstatusActivity.this, null);//這里的问题
startActivity(intent);//numberNo.setText("");
if (!Tools.isServiceRunning(roomstatusActivity.this, "com.topone.hips.service.HIPSService")) {
Intent intentService = new Intent(roomstatusActivity.this, HIPSService.class);
startService(intentService);
}
} else {
Intent intent = new Intent(roomstatusActivity.this, null);
startActivity(intent);
finish();
}
} catch (Exception e) {
e.printStackTrace();
} finally {

}
}
};

private Handler handler = new Handler() {
@Override
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case SHOW_MESSAGE:
if (msg.obj != null) {
Tools.show(roomstatusActivity.this, msg.obj.toString());
}
break;
}
};
};

...全文
496 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38403349 2017-04-22
  • 打赏
  • 举报
回复
虽则回复中没有人真正的有效的回复,但也非常感谢,终于自已解决了,是由于tab嵌套一个tab,里层的tab里的activity调用进度对话框会报错(token android.app.LocalActivityManager$LocalActivityRecord@b3ffb858 is not valid; is your activity running?),原因是获取不到窗口以及传入里层的Context的问题。只要将xxActivity.this改成xxActivity.this.getParent()获取到母窗体即可。
youisbest7777 2017-04-22
  • 打赏
  • 举报
回复
虽则回复中没有人真正的有效的回复,但也非常感谢,终于自已解决了,是由于tab嵌套一个tab,里层的tab里的activity调用进度对话框会报错(token android.app.LocalActivityManager$LocalActivityRecord@b3ffb858 is not valid; is your activity running?),原因是获取不到窗口以及传入里层的Context的问题。只要将xxActivity.this改成xxActivity.this.getParent()获取到母窗体即可。
youisbest7777 2017-04-20
  • 打赏
  • 举报
回复
xb_hope谢谢回复,这个知道,我只是测试,程序一开始启动一点击就直接退出,不是打开过dialog之后,再点击打开而引起的退出,如果是第一次行,而第二次不可以,那可以考虑是由于dialog状态原因(打开没有退出),
youisbest7777 2017-04-20
  • 打赏
  • 举报
回复
这个真的没有人知道或能解决!
哎,真难 2017-04-19
  • 打赏
  • 举报
回复
牛逼了,,你在每个点击事件里面新建一个dialog就知道了
youisbest7777 2017-04-19
  • 打赏
  • 举报
回复
自已顶一下,急,避免沉了
youisbest7777 2017-04-19
  • 打赏
  • 举报
回复
不好意思,因为是真机测试一直没有弄出日志 出来,现在用调试器弄出来的错误日志如下: 04-18 21:57:19.141: E/AndroidRuntime(2922): FATAL EXCEPTION: main 04-18 21:57:19.141: E/AndroidRuntime(2922): Process: com.topone.hips, PID: 2922 04-18 21:57:19.141: E/AndroidRuntime(2922): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@b3fee010 is not valid; is your activity running? 04-18 21:57:19.141: E/AndroidRuntime(2922): at android.view.ViewRootImpl.setView(ViewRootImpl.java:534) 04-18 21:57:19.141: E/AndroidRuntime(2922): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259) 04-18 21:57:19.141: E/AndroidRuntime(2922): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 04-18 21:57:19.141: E/AndroidRuntime(2922): at android.app.Dialog.show(Dialog.java:286) 04-18 21:57:19.141: E/AndroidRuntime(2922): at com.topone.hips.activity.roomstatusActivity$6.onClick(roomstatusActivity.java:157) 04-18 21:57:19.141: E/AndroidRuntime(2922): at android.view.View.performClick(View.java:4424) 04-18 21:57:19.141: E/AndroidRuntime(2922): at android.view.View$PerformClick.run(View.java:18383) 04-18 21:57:19.141: E/AndroidRuntime(2922): at android.os.Handler.handleCallback(Handler.java:733) 04-18 21:57:19.141: E/AndroidRuntime(2922): at android.os.Handler.dispatchMessage(Handler.java:95) 04-18 21:57:19.141: E/AndroidRuntime(2922): at android.os.Looper.loop(Looper.java:137) 04-18 21:57:19.141: E/AndroidRuntime(2922): at android.app.ActivityThread.main(ActivityThread.java:4998) 04-18 21:57:19.141: E/AndroidRuntime(2922): at java.lang.reflect.Method.invokeNative(Native Method) 04-18 21:57:19.141: E/AndroidRuntime(2922): at java.lang.reflect.Method.invoke(Method.java:515) 04-18 21:57:19.141: E/AndroidRuntime(2922): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 04-18 21:57:19.141: E/AndroidRuntime(2922): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 04-18 21:57:19.141: E/AndroidRuntime(2922): at dalvik.system.NativeStart.main(Native Method)
  • 打赏
  • 举报
回复
你这是同一个dialog 在使用的时候判断一下这个dialog的状态
youisbest7777 2017-04-19
  • 打赏
  • 举报
回复
自已顶一下,避免沉了,急
youisbest7777 2017-04-19
  • 打赏
  • 举报
回复
去掉这段也还是一样
ganshenml 2017-04-19
  • 打赏
  • 举报
回复
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) 这段去掉看看
youisbest7777 2017-04-19
  • 打赏
  • 举报
回复
拿着别人的程序在学习,但不在每个点击事件中放一个dialog也一样,只是为了调试方便才放的。如果调试好了,就会统一放在自定义的过程中。麻烦高手解一解
YXTS122 2017-04-18
  • 打赏
  • 举报
回复
对,你得把报错信息贴出来啊啊!!!!
sagittarius1988 2017-04-18
  • 打赏
  • 举报
回复
你要贴上报错时的logcat信息

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧