开发者

how to prevent my android app from force closing?

In the user interface of my application there are four buttons out of which three buttons(when clicked) retrieve an image from mysql db and display it in the android phone. the fourth button's job is to retrieve text from the db.

if any of the buttons that retrieve image are clicked first the image is displayed.and then if the button that retrieve's an image is clicked the text is displayed.

But when the button that retrieves the text is clicked first even before any button that displays the image is clicked the application force closes!!

the code for the onClick activity of the button that retrieves text is as follows

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 android.app.ITransientNotification$Stub$Proxy@44de2548 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 android.app.ITransientNotification$Stub$Proxy@44de2c70 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 notific开发者_如何学Cation android.app.ITransientNotification$Stub$Proxy@44dd78a0 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 android.app.ITransientNotification$Stub$Proxy@44dd7fc8 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

code that retrieves image

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();

                    }
             });


My feeling is a null-pointer error. What I would do is surround the whole method in a big try{} catch (Throwable t) {} block.

Then print out the stack trace, and the error message. Thing is that you would have to debug step the code, since System.out.println() doesn't do much in android.

(aside: in android, I've gotten used to using Log.v() or something similar for throwaway debug code where on other platforms you would use sysout)

Or you could try the android logging framework with something like:

catch (Throwable t)
{
    Log.v("Ric_TEST", t.getMessage();
}

You can then search your logcat download for the word "Ric_TEST". Alternatively (assuming you use Eclipse) you can filter the logcat output by typing the tag text in.

Another similar way is to connect to your device using the adb (adb logcat -v time) and you can watch the log, and see the stack trace when the app crashes.

Pls note: once you find the fault, remove the try..catch block I have mentioned - I'm only advocating it as a tool to find the fault.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜