如何防止我的android应用程序强制关闭?
问题描述:
在我的应用程序的用户界面中有四个按钮,其中三个按钮(当单击时)从mysql db中检索图像并将其显示在android手机中。第四个按钮的工作是从数据库中检索文本。如何防止我的android应用程序强制关闭?
如果有任何检索图像的按钮先被点击,图像将被显示。然后如果点击检索图像的按钮,则会显示文本。
但是,当点击显示图像的任何按钮之前首先单击检索文本的按钮时,应用程序强制关闭!
检索文本如下
b.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Toast.LENGTH_SHORT).show();
try {
data.put("id",id);
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String url="http://10.0.2.2:8080/finder/review/listA";
try {
img.setImageBitmap(null);
json =HTTPPoster.doPost(url, data);
Toast.makeText(getBaseContext(),json.toString(), Toast.LENGTH_SHORT).show();
titles=json.getJSONObject("titles");
Toast.makeText(getBaseContext(), titles.toString(), Toast.LENGTH_SHORT).show();
msgs=json.getJSONObject("msgs");
names=json.getJSONObject("names");
String one=titles.getString("0");
Toast.makeText(getBaseContext(), one.toString(),Toast.LENGTH_LONG).show();
t.setText("\nReviews \n");
String content="";
for(int i=0;i<3;i++)
{
String msg=msgs.getString(i+"");
name=names.getString(i+"");
String title=titles.getString(i+"");
content=t.getText()+("\n Name"+name+"\n Title: "+title+"\n Msg:"+msg);
t.setText(content);
Toast.makeText(getBaseContext(),"Name:"+name+"\n Title: "+title+"\n Message"+msg,Toast.LENGTH_SHORT).show();
}
// t.setText()
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
logcat的
06-07 00:25:29.923: INFO/Process(234): Sending signal. PID: 234 SIG: 9
06-07 00:25:30.042: INFO/WindowManager(58): WIN DEATH: Window{44e66ef0 com.lpss/com.lpss.MyList paused=false}
06-07 00:25:30.053: INFO/WindowManager(58): WIN DEATH: Window{44d72da0 com.lpss/com.lpss.lpss paused=false}
06-07 00:25:30.053: INFO/ActivityManager(58): Process com.lpss (pid 234) has died.
06-07 00:25:30.062: WARN/GpsLocationProvider(58): Unneeded remove listener for uid 1000
06-07 00:25:30.062: DEBUG/GpsLocationProvider(58): stopNavigating
06-07 00:25:30.062: INFO/WindowManager(58): WIN DEATH: Window{44dedb10 Toast paused=false}
06-07 00:25:30.091: WARN/ActivityManager(58): Scheduling restart of crashed service com.lpss/.NotifyService in 5000ms
06-07 00:25:30.103: INFO/WindowManager(58): WIN DEATH: Window{44dd9490 com.lpss/com.lpss.Contents paused=false}
06-07 00:25:30.244: INFO/ActivityManager(58): Start proc com.lpss for activity com.lpss/.MyList: pid=248 uid=10030 gids={3003, 1015}
06-07 00:25:30.244: ERROR/ActivityThread(58): Failed to find provider info for android.server.checkin
06-07 00:25:30.244: WARN/Checkin(58): Can't log event SYSTEM_SERVICE_LOOPING: java.lang.IllegalArgumentException: Unknown URL content://android.server.checkin/events
06-07 00:25:30.743: DEBUG/ddm-heap(248): Got feature list request
06-07 00:25:30.912: INFO/UsageStats(58): Unexpected resume of com.lpss while already resumed in com.lpss
06-07 00:25:31.443: WARN/InputManagerService(58): Got RemoteException sending setActive(false) notification to pid 234 uid 10030
06-07 00:25:31.603: INFO/ActivityManager(58): Displayed activity com.lpss/.MyList: 1487 ms (total 1487 ms)
06-07 00:25:31.713: WARN/NotificationService(58): Object died trying to hide notification [email protected] in package com.lpss
06-07 00:25:31.713: WARN/ActivityManager(58): setProcessForeground called on unknown pid: 234
06-07 00:25:31.723: WARN/NotificationService(58): Object died trying to show notification [email protected] in package com.lpss
06-07 00:25:31.723: WARN/ActivityManager(58): setProcessForeground called on unknown pid: 234
06-07 00:25:31.723: WARN/NotificationService(58): Object died trying to show notification [email protected] in package com.lpss
06-07 00:25:31.723: WARN/ActivityManager(58): setProcessForeground called on unknown pid: 234
06-07 00:25:31.723: WARN/NotificationService(58): Object died trying to show notification [email protected] in package com.lpss
06-07 00:25:31.723: WARN/ActivityManager(58): setProcessForeground called on unknown pid: 234
06-07 00:41:25.262: DEBUG/dalvikvm(58): GC freed 19490 objects/957584 bytes in 209ms
代码检索图像
b3.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
try {
data.put("name",name);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String url="http://10.0.2.2:8080/finder/place/ph?id="+id;
// json =HTTPPoster.doPost(url, data);
downloadImage(url);
// Toast.makeText(this,json.toString() , Toast.LENGTH_SHORT).show();
}
});
b4.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
t.setText("");
try {
data.put("name",name);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String url="http://10.0.2.2:8080/finder/place/map?id="+id;
// json =HTTPPoster.doPost(url, data);
downloadImage(url);
// Toast.makeText(this,json.toString() , Toast.LENGTH_SHORT).show();
}
});
答
M表示的按钮的onclick活性的代码你的感觉是一个空指针错误。我要做的是将整个方法放在一个大的try{} catch (Throwable t) {}
区块中。
然后打印出堆栈跟踪和错误消息。事情是,你将不得不调试步骤的代码,因为System.out.println()在android中没有太大的作用。
(旁白:在Android中,我已经习惯了使用Log.v()或一次性调试代码,其中在其他平台上你可以使用系统输出类似的东西)
或者你可以尝试android的日志框架与类似的东西:
catch (Throwable t)
{
Log.v("Ric_TEST", t.getMessage();
}
然后,您可以搜索您的logcat下载单词“Ric_TEST”。或者(假设您使用Eclipse),您可以通过输入标记文本来过滤logcat输出。
另一种类似的方法是使用adb(adb logcat -v time)连接到您的设备,并且您可以观看日志,并在应用程序崩溃时查看堆栈跟踪。
请注意:一旦发现错误,请删除我提到的try..catch块 - 我只是将它作为一种工具来发现错误。
你可以请发布stacktrace? – BigFwoosh 2011-06-06 19:04:28
就像BigFwosh说的那样,我们需要一个堆栈轨迹来了解从哪里开始。这可能是因为它无法从你的数据库中读取,可能是因为任何原因你的方法中的任何对象都是空的。 – CaseyB 2011-06-06 19:15:03
logcat中有很多条目..我怎么知道要发布哪一个? – Shalini 2011-06-06 19:29:21