مشکل در تجزیه جیسون

گزارش
سوال

لطفا علت گزارش خود را توضیح دهید.

گزارش لغو

با سلام و خسته نباشید.
من یه فایل php دارم که یه سری اطلاعات رو از mySql میخونه و اون رو به اندروید ارسال میکنه .
سورسش هم به این شکل هست :

سورس php برای دریافت اطلاعات از دیتابیس MySql
از سمت اندروید هم با کتابخانه Volley اطلاعات رو دریافت میکنم اما یه ارور بهم میده میشه بهم راهنمایی کنید ؟
سورس دریافت اطلاعات با کتابخانه Volley

و اما اروری که بهم میده :
Volley: onErrorResponse: com.android.volley.ParseError: org.json.JSONException: Value of type java.lang.String cannot be converted to JSONArray

داره به پارس کردن json  من ایراد میگیره اما نمیدونم دقیق چطوری باید رفعش کنم
ایا سورس کدی دارین  که بتونه کمکم کنه ؟
یه دیتا مدلی هم ساختم به اسم post که قراره اطلاعات رو بگیره و بعد درون یه RecyclerView نمایش بده عکس اون بخشم میزارم شاید کمکتون کرد :
عکس از کلاس Post

حل شده 0
اندروید - android 12 پاسخ 456 بازدید 0

درباره نویسنده

پاسخ ها ( ۱۲ )

  1. محمد حسین جعفری پور
    0
    ۲, مرداد , ۱۳۹۷ در ۱۲:۴۴ ق.ظ

    لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

    گزارش لغو

    سلام و درود علت خطای بالا مطمئنن به خاطر json است که شما ساختید یک نمونه json قرار دهید تا نحوه پارس آن را به شما بگویم

    موفق باشید.

    بهترین پاسخ
    • Behnamsa
      0
      ۲, مرداد , ۱۳۹۷ در ۱۰:۵۴ ق.ظ

      لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

      گزارش لغو

      سلام؛ یک دیتابیس دارم در mysql که که فیلد هاش به ترتیب id _Username_Password_visit هست . وقتی با اون کد های php که در بالا براتون قرار دادم مقادیر رو دریافت میکنم جیسون زیر رو توی مرورگر من بهم نمایش میده :

      [{“id”:”10″,”Username”:”Behnam”,”Password”:”Behnam@7878″,”visit”:”1″},{“id”:”11″,”Username”:”Ali”,”Password”:”Ali@qwqw”,”visit”:”1″},{“id”:”14″,”Username”:”hasan”,”Password”:”154875″,”visit”:”1″},{“id”:”15″,”Username”:”pourya”,”Password”:”saravani123″,”visit”:”1″},{“id”:”16″,”Username”:”Shahin”,”Password”:”parvi78″,”visit”:”1″}]Record updated successfully

      اینم ادرس عکس از جیسون بالا که براتون اپلود کردم ببینید همین جیسون رو :
      http://uupload.ir/file/w608_getdate.png

      نحوه دریافت با volley از طریق اندروید استودیو هم که توی تیکِت اولی براتون اپلود کرده بودم که چطوری دارم دریافت میکنم.

      {کلیت کار این آپ به این صورت هست که قراره یه سری یوزرنیم و پسوورد همراه با یک مقدار (یا ۰ یا ۱) توی دیتابیس mysql ثبت بشه و با فایل php چک بشه اگر مقدار ما یک بود اون یوزرنیم پسوورد هارو برای ما بفرسته و ما توی یه ریسایکلر ویو دونه دونه این مقادیر رو ببینیم اگر هم ۰ بود چیزی ارسال نشه یعنی قبلا ارسال شده .
      چون که داخل کد php من دستور نوشتم هر وقت که مقادیر رو ارسال کرد اون فیلد هایی که مقدار ۱ دارند به ۰ اپدیت بشن که توی درخواست بعدی مقدار های تکراری ارسال نشن}

      • محمد حسین جعفری پور
        0
        ۲, مرداد , ۱۳۹۷ در ۳:۲۵ ب.ظ

        لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

        گزارش لغو

        سلام کل مشکل شما در خط Record updated successfully است شما با این خط فرمت json رو بهم میریزید آن بخش رو حذف کنید از توی کد php و تست بکنید باید درست بشه.

        موفق باشید.

  2. Behnamsa
    0
    ۲, مرداد , ۱۳۹۷ در ۹:۰۲ ب.ظ

    لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

    گزارش لغو

    اون قسمت Record updated successfully رو پاک کردم اما حل نشد متاسفانه :/

    [{“id”:”10″,”Username”:”Behnam”,”Password”:”Behnam@7878″,”visit”:”1″},{“id”:”14″,”Username”:”hasan”,”Password”:”154875″,”visit”:”1″},
    {“id”:”19″,”Username”:”Behnam”,”Password”:”sa”,”visit”:”1″},
    {“id”:”20″,”Username”:”ahmad”,”Password”:”safari”,”visit”:”1″}]
    الان با اجرای فایل؛ جیسون رو خیلی سالم به این شکل نشون میده : http://uupload.ir/files/hvqv_qqq.png
    اما متاسفانه همون اخطار رو توی اندروید بهم نشون میده.
    Volley: onErrorResponse: com.android.volley.ParseError: org.json.JSONException: Value  of type java.lang.String cannot be converted to JSONArray
    اخه من هرجا هم که دیدم همینطوری جیسون رو سمت اندروید pars میکنن. اما واسه من همچین مشکلی داره که واقعا کلافم کرده
    ممکنه این ارور مربوط به بخش های دیگه باشه ؟
    مثلا ریسایکلر ویو رو خوب ست نکرده باشم , از طرفی هم میگم فک نکنم ربطی به بخش های دیگه داشته باشه چون حتی pars کردن جیسون رو هم پاک کردم و فقط یه Log انداختم طبق همون چیزی که شما گفته بودین : Log.d(“Response”, response.toString());
    و کد های زیر رو در برنامه کامنت کردم :
    List posts = new ArrayList();
    for (int i = 0 ; i < response.length() ; i++){
    Post post = new Post();
    try {
    JSONObject jsonObject =response.getJSONObject(i);
    post.setId(jsonObject.getInt("id"));
    post.setUsername(jsonObject.getString("Username"));
    post.setPassword(jsonObject.getString("Password"));

    posts.add(post);
    } catch (JSONException e) {
    e.printStackTrace();
    }
    onPostsReceived.onReceived(posts);
    }
    اما بازم همون اخطار رو داد

    • محمد حسین جعفری پور
      0
      ۳, مرداد , ۱۳۹۷ در ۲:۳۸ ب.ظ

      لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

      گزارش لغو

      سلام و درود من json شما را پارس کردم البته به صورت رشته و فکر می کنم json که دارید سمت سرور می سازید بعد از ساخته شدن بهم می ریزد حالا علت رو نمی دونم چون الان json که اینجا قرار دادید اصلا استاندارد نیست به جای url جیسان را از رشته بخونید ببینید مشکل حل می شود یا خیر یا مثلا در یک فایل سمت سرور این رو درست کنید شاید مشکل حل شد.

      موفق باشید.

    • محمد حسین جعفری پور
      0
      ۳, مرداد , ۱۳۹۷ در ۲:۳۹ ب.ظ

      لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

      گزارش لغو

      و اینکه شما نباید از getint در جاوا استفاده کنید چون کل json شما به صورت رشته برگرشت خواهد داده شده است نه به صورت int فکر کنم علت خطا همین جا باشه

  3. Behnamsa
    0
    ۴, مرداد , ۱۳۹۷ در ۱۲:۱۸ ب.ظ

    لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

    گزارش لغو

    سلامی مجدد خدمت استاد گرامی ؛

    من رفتم همین کاری که شما گفتید رو انجام دادم یعنی یه فایل جدید درست کردم و داخلش فقط جیسون قرار دادم و این سری داخل اندروید یه اکتیویتی جدید ساختم برای تست و اطلاعات و دریافت کردم و توی یه textView نمایش دادم دیدم به درستی اطلاعات و دریافت کرد.
    ولی همچنان اطلاعات رو که میخوام از getdate.php بگیرم ( همون فایل php که اطلاعات رو از دیتابیس mysql دریافت میکنه ) ارور میده که String رو نمیتونه تبدیل به jsonArray کنه (Value  of type java.lang.String cannot be converted to JSONArray) و واقعا گیج شدم نمیدونم مشکل از کجاس
    قائدتا اگر نحوه parse کردن من مشکل داشت نباید اطلاعات رو توی این فایلی که ساختم هم دریافت کنم . در مورد اون مطلب شما هم که گفتید داخل جاوا نباید از getInt استفاده کرد ، خب من یکی از ستون های دیتابیسم به نام id هست و اطلاعات رو به صورت عدد صحیح و AUTO_INCREMENT دریافت میکنه و اینکه من چند سایت خارجی مثل android Hive رو هم که سر زدم خیلی راحت با getInt اطلاعات رو دریافت میکرد و تازه میگفت که دیتابیس از هر نوع که باشه (TEXT,Int و …) باید اطلاعات توی اندروید هم از همون نوع و با همون نام ستون ها دریافت کنیم ؛ حالا جدای این حرفا بازم من رفتم و اطلاعات و تغییر دادم و بجای getInt نوشتم getString طبق فرمایشات شما و مقدار رو توی یه متغیر String ذخیره کردم ولی بازم همون اخطار بالا رو نمایش میده :/

    • Behnamsa
      0
      ۴, مرداد , ۱۳۹۷ در ۱۲:۳۰ ب.ظ

      لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

      گزارش لغو

      راستی در مورد این موضوع که گفتید از url استفاده نکنید ؛
      من اون فایل رو همونطور که گفتید داخل یه فایلی به اسم test.php ذخیره کردم
      تصویرشم براتون اپلود کردم میتونید ببینید : http://uupload.ir/files/27ow_testt.png
      وقتی که توی مرورگر هم مینویسم localhost/test.php دقیقا فایل رو مثل فایل جیسونی که وقتی getdate.php رو سرچ میکنم نمایش میده
      که عکسشم براتون اپلود کردم میتونید ببینید : http://uupload.ir/files/ryyv_textphpfire.png پس فکر نمیکنم مشکلم از نحوه نمایش دادن جیسون باشه طبق اون گفته شما که گفته بودید 🙁 من json شما را پارس کردم البته به صورت رشته و فکر می کنم json که دارید سمت سرور می سازید بعد از ساخته شدن بهم می ریزد حالا علت رو نمی دونم چون الان json که اینجا قرار دادید اصلا استاندارد )

      • محمد حسین جعفری پور
        0
        ۴, مرداد , ۱۳۹۷ در ۱:۲۴ ب.ظ

        لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

        گزارش لغو

        بازم عرض می کنم فکر می کنم مشکل در متد getInt باشد چون id شما به صورت رشته است نه Int شاید سمت سرور int باشد ولی در json فعلی مقدار آن رشته است طبق همان مثل json اگر چک کنید متوجه می شوید.

    • محمد حسین جعفری پور
      0
      ۴, مرداد , ۱۳۹۷ در ۱:۲۲ ب.ظ

      لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

      گزارش لغو

      سلام مجدد
      به احتمال زیاد این فایل php که شما نوشتید خروجی json نمیده البته میده با این تفاوت که مثل اینکه یک space چیزی در این json هست که باعث میشه volley متوجه نشه این اطلاعات json هست و خطای string رو میده در مورد getInt من نگفتم استفاده نکنید چون شما json که بر می گردوندید من دیدم به صورت رشته بود و نه int در ادامه یک مثال از json های مختلف برای شما قرار میدهیم.

      برای اطلاعات بیشتر لینک مربوط به json رو در تلگرام برام بفرستید تا بررسی کنیم.
      @bbong9811

      موفق باشید.

      • Behnamsa
        0
        ۵, مرداد , ۱۳۹۷ در ۲:۰۵ ق.ظ

        لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

        گزارش لغو

        سلام خدمت استاد جعفری پور ؛
        خوشبختانه مشکل من حل شد.
        نمیدونم دقیقا مشکل از چی بود ولی دیتابیس جدید ساختم باهمون مشخصات و همون اطلاعات ولی اطلاعات و به درستی دریافت میکنم حتی getInt هم مینویسم و مشکلی نداره ؛
        خواستم تشکر ویژه کنم از شما و سایت خوبتون که با حوصله جواب تک تک سوالاتمون رو دادین
        ایشالله همیشه موفق باشید ♥

    0
    ۲, بهمن , ۱۳۹۷ در ۵:۲۹ ب.ظ

    لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

    گزارش لغو

    باید در این رابطه خدمتتون عرض کنم من همین کار رو با کتابخونه android-networking که انجام میدم json در یافتی بدون space برگردونده میشه اما با کتابخونه volley فاصله ایجاد میکنه

ارسال نظر