duggu
duggu

Reputation: 38439

java.lang.StackOverflowError error shows on making json array object?

Making json array but shows error. Try below link but nothing is happened:-

Add JsonArray to JsonObject

java file

try 
            {
                View view;
                for (int i = 0; i < list_lay.getChildCount(); i++) 
                {
                    view=list_lay.getChildAt(i);
                    JSONObject j1=new JSONObject();
                    TextView main = (TextView) view.findViewById(R.id.main);

                    String[] m=main.getTag().toString().split("::::");

                    j1.put("account_id",m[0]);
                    j1.put("address_1",m[1]);
                    j1.put("address_2",m[2]);
                    j1.put("city",m[3]);
                    j1.put("email",m[4]);
                    j1.put("id",m[5]);
                    j1.put("manager_name",m[6]);
                    j1.put("name",m[7]);
                    j1.put("zip",m[11]);
                    j1.put("state",m[9]);
                    j1.put("phone",m[8]);
                    j1.put("website",m[10]);

                    LinearLayout data_main1=(LinearLayout) view.findViewById(R.id.data_main1);;

                    JSONArray j_class=new JSONArray();


                    System.out.println("data_main1.getChildCount() => "+data_main1.getChildCount());

                    for (int k = 0; k < data_main1.getChildCount(); k++) 
                    {

                        View view1=data_main1.getChildAt(k);
                        TextView name = (TextView) view1.findViewById(R.id.name);
                        CheckBox cb = (CheckBox) view1.findViewById(R.id.checkBox1);

                        if(cb.isChecked())
                        {
                            JSONObject j1_class=new JSONObject();
                            String [] l=name.getTag().toString().split("::::");
                            j1_class.put("id",(Object)l[0]);
                            j1_class.put("teacher",(Object)l[1]);
                            j1_class.put("name",(Object)l[2]);
                            j1_class.put("enrolled",(Object)"yes");
                            j_class.put((Object)j1);

                            System.out.println("j1  => "+(Object)j1);
                            System.out.println("j_class  => "+(Object)j_class);
                        }
                    }
                    j1.put("classes", (Object)j_class);
                    json.put((Object)j1);

                    System.out.println("json  => "+json);

                }
                System.out.println("array   => "+(Object)json);

                List <NameValuePair> nvps = new ArrayList <NameValuePair>();
                nvps.add(new BasicNameValuePair("params", json.toString()));
                nvps.add(new BasicNameValuePair("student_id", getIntent().getStringExtra("sid")));
                nvps.add(new BasicNameValuePair("account_id", HomeScreen.account_id));

                String result = SendJSON.sendJson(
                        "http://example.com/mob/xxx.php"
                        ,nvps,"PHPSESSID=lelrk87empdqsa3assadags9kpsncuv6");

                return result;
            }
            catch (Exception e) 
            {
                // TODO: handle exception
                e.printStackTrace();
            }

Logcat

10-04 21:55:49.309: E/AndroidRuntime(13183): FATAL EXCEPTION: AsyncTask #1
10-04 21:55:49.309: E/AndroidRuntime(13183): java.lang.RuntimeException: An error occured while executing doInBackground()
10-04 21:55:49.309: E/AndroidRuntime(13183):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at java.lang.Thread.run(Thread.java:856)
10-04 21:55:49.309: E/AndroidRuntime(13183): Caused by: java.lang.StackOverflowError
10-04 21:55:49.309: E/AndroidRuntime(13183):    at java.lang.String._getChars(String.java:913)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:147)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at java.lang.StringBuilder.append(StringBuilder.java:216)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.beforeValue(JSONStringer.java:412)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.open(JSONStringer.java:178)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.array(JSONStringer.java:139)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONArray.writeTo(JSONArray.java:570)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:233)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONObject.writeTo(JSONObject.java:667)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:237)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONArray.writeTo(JSONArray.java:572)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:233)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONObject.writeTo(JSONObject.java:667)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:237)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONArray.writeTo(JSONArray.java:572)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:233)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONObject.writeTo(JSONObject.java:667)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:237)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONArray.writeTo(JSONArray.java:572)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:233)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONObject.writeTo(JSONObject.java:667)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:237)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONArray.writeTo(JSONArray.java:572)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:233)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONObject.writeTo(JSONObject.java:667)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:237)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONArray.writeTo(JSONArray.java:572)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:233)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONObject.writeTo(JSONObject.java:667)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:237)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONArray.writeTo(JSONArray.java:572)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:233)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONObject.writeTo(JSONObject.java:667)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:237)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONArray.writeTo(JSONArray.java:572)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:233)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONObject.writeTo(JSONObject.java:667)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:237)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONArray.writeTo(JSONArray.java:572)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:233)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONObject.writeTo(JSONObject.java:667)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:237)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONArray.writeTo(JSONArray.java:572)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:233)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONObject.writeTo(JSONObject.java:667)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:237)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONArray.writeTo(JSONArray.java:572)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:233)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONObject.writeTo(JSONObject.java:667)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:237)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONArray.writeTo(JSONArray.java:572)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:233)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONObject.writeTo(JSONObject.java:667)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:237)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONArray.writeTo(JSONArray.java:572)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:233)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONObject.writeTo(JSONObject.java:667)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:237)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONArray.writeTo(JSONArray.java:572)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONStringer.value(JSONStringer.java:233)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org.json.JSONObject.writeTo(JSONObject.java:667)
10-04 21:55:49.309: E/AndroidRuntime(13183):    at org
10-04 21:56:02.329: E/WindowManager(13183): Activity xicom.biz.dancestudio.HomeScreen has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41fdc290 that was originally added here
10-04 21:56:02.329: E/WindowManager(13183): android.view.WindowLeaked: Activity xicom.biz.dancestudio.HomeScreen has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41fdc290 that was originally added here
10-04 21:56:02.329: E/WindowManager(13183):     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:419)
10-04 21:56:02.329: E/WindowManager(13183):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:322)
10-04 21:56:02.329: E/WindowManager(13183):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:234)
10-04 21:56:02.329: E/WindowManager(13183):     at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:153)
10-04 21:56:02.329: E/WindowManager(13183):     at android.view.Window$LocalWindowManager.addView(Window.java:557)
10-04 21:56:02.329: E/WindowManager(13183):     at android.app.Dialog.show(Dialog.java:277)
10-04 21:56:02.329: E/WindowManager(13183):     at xicom.biz.dancestudio.more.StudentClassesDetail$SaveDialog.onPreExecute(StudentClassesDetail.java:103)
10-04 21:56:02.329: E/WindowManager(13183):     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
10-04 21:56:02.329: E/WindowManager(13183):     at android.os.AsyncTask.execute(AsyncTask.java:534)
10-04 21:56:02.329: E/WindowManager(13183):     at xicom.biz.dancestudio.more.StudentClassesDetail$2.onClick(StudentClassesDetail.java:86)
10-04 21:56:02.329: E/WindowManager(13183):     at android.view.View.performClick(View.java:4191)
10-04 21:56:02.329: E/WindowManager(13183):     at android.view.View$PerformClick.run(View.java:17229)
10-04 21:56:02.329: E/WindowManager(13183):     at android.os.Handler.handleCallback(Handler.java:615)
10-04 21:56:02.329: E/WindowManager(13183):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-04 21:56:02.329: E/WindowManager(13183):     at android.os.Looper.loop(Looper.java:137)
10-04 21:56:02.329: E/WindowManager(13183):     at android.app.ActivityThread.main(ActivityThread.java:4960)
10-04 21:56:02.329: E/WindowManager(13183):     at java.lang.reflect.Method.invokeNative(Native Method)
10-04 21:56:02.329: E/WindowManager(13183):     at java.lang.reflect.Method.invoke(Method.java:511)
10-04 21:56:02.329: E/WindowManager(13183):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
10-04 21:56:02.329: E/WindowManager(13183):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
10-04 21:56:02.329: E/WindowManager(13183):     at dalvik.system.NativeStart.main(Native Method)

I do not understand what is happened because i will try so many time before this. So any body can help me

ANSWER

problem resolve by using .toString on json value.

ex

            try 
            {

                View view;
                for (int i = 0; i < list_lay.getChildCount(); i++) 
                {
                    view=list_lay.getChildAt(i);
                    JSONObject j1=new JSONObject();
                    TextView main = (TextView) view.findViewById(R.id.main);

                    String[] m=main.getTag().toString().split("::::");

                    j1.put("account_id",m[0]);
                    j1.put("address_1",m[1]);
                    j1.put("address_2",m[2]);
                    j1.put("city",m[3]);
                    j1.put("email",m[4]);
                    j1.put("id",m[5]);
                    j1.put("manager_name",m[6]);
                    j1.put("name",m[7]);
                    j1.put("zip",m[11]);
                    j1.put("state",m[9]);
                    j1.put("phone",m[8]);
                    j1.put("website",m[10]);

                    LinearLayout data_main1=(LinearLayout) view.findViewById(R.id.data_main1);;

                    JSONArray j_class=new JSONArray();


                    System.out.println("data_main1.getChildCount() => "+data_main1.getChildCount());

                    for (int k = 0; k < data_main1.getChildCount(); k++) 
                    {

                        View view1=data_main1.getChildAt(k);
                        TextView name = (TextView) view1.findViewById(R.id.name);
                        CheckBox cb = (CheckBox) view1.findViewById(R.id.checkBox1);

                        if(cb.isChecked())
                        {
                            JSONObject j1_class=new JSONObject();
                            String [] l=name.getTag().toString().split("::::");
                            j1_class.put("id",l[0].toString());
                            j1_class.put("teacher",l[1].toString());
                            j1_class.put("name",l[2].toString());
                            j1_class.put("enrolled","yes".toString());
                            j_class.put(j1.toString());

                            System.out.println("j1  => "+j1.toString());
                            System.out.println("j_class  => "+j_class.toString());
                        }
                    }
                    j1.put("classes", j_class.toString());
                    json.put(j1.toString());

                    System.out.println("json  => "+json.toString());

                }
                System.out.println("array   => "+json.toString());
            }
            catch (Exception e) 
            {
                // TODO: handle exception
            }

But i'm still confuse bcz before this i'm making so many time json array and json object but never ever see that kind of error.

So now my question is what's going on this problem?

Upvotes: 2

Views: 4234

Answers (2)

Fred Ondieki
Fred Ondieki

Reputation: 2512

JSONObject json = new JSONObject();

    try {

        json.append("msisdn", new Object());
        JSONArray messages = new JSONArray();

        json.append("messages",(Object) messages);          


        JSONArray calls = new JSONArray();

        json.append("calls", (Object)calls);


        JSONArray locations = new JSONArray();

        json.append("locations", (Object)locations);




        while (rs.next()) {




            calldate =rs.getTimestamp(5);
            calltype =rs.getString(6);
            callstate =rs.getString(7);




            /**Location**/
            locationname =rs.getString(9);
            longitude=rs.getString(10);
            latitude=rs.getString(11);
            locationtimestamp =rs.getTimestamp(12);
            positionid =rs.getInt(13);

            /**********MESSAGES******/
            JSONObject messageObject = new JSONObject();
            messageObject.append("date", smsdate);
            messageObject.append("type", type);
            messageObject.append("sms", message);
            messages.put(messageObject.toString());

            /**********CALLS******/
            JSONObject callObject = new JSONObject();
            callObject.append("date", calldate);
            callObject.append("type", calltype);
            callObject.append("msisdn", msisdn);
            callObject.append("status", callstate);
            calls.put(callObject.toString());
            /***********LOCATIONS********/
            JSONObject locationObject = new JSONObject();
            locationObject.append("date", locationdate);
            locationObject.append("placename", locationname);
            locationObject.append("latitude", latitude);
            locationObject.append("longitude", longitude);
            locations.put(locationObject.toString());


        }
        json.append("msisdn", msisdn_);

    }catch(JSONException je){   
        je.printStackTrace();
    } catch (Exception se) {

Also remember to do Stringify them.See above snippet :(toString());) Hope it helps somebody out there ;)

Upvotes: 0

Henry
Henry

Reputation: 43798

You have built up a circular structure: j_class contains j1 and j1 contains j_class.

Probably you wanted to put j1_class into j_class instead.

Upvotes: 4

Related Questions