بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

خوندن اطلاعات از سمت سرور به وسیله آندروید ( حل شد )

مدیریت گفتگو
alireza 11 سال پیش
آخرین تغییر: 11 سال پیش

سلام دوستان من یه برنامه نوشتم که اطلاعات رو از سمت سرور می خونه وروی دیتابیس ذخیره می کنه اما یه مشکل جدیدا باهاش برخورد کردم و اون اینه که وقتی اطلاعات به صورت جیسون می فرستم همه به دیتا بیسم اضافه میشن برای بارهای بعد که اطلاعات جدیدی اضافه میشه فقط جیسون مربوط به اون اطلاعات جدید رو ارسال می کنم ولی چیزی به دیتا بیسم اضافه نمی شه اما اگر اطلاعات قبلی رو هم بفرستم مشکلی به وجود نمی یاد و به دیتا بیسم اطلاعات اضافه میشه 

این کد قسمتی از سمت سرورم هست که اطلاعات رو به صورت جیسون میفرسته 

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

 <?php


$mobileNews=array();


$mobileNews[0]['id']=1;
$mobileNews[0]['title']='title1';
$mobileNews[0]['news']='لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان
گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود
ابزارهای کاربردی می باشد. کتابهای زیادی در شصت و سه درصد گذشته، حال و آینده شناخت فراوان جامعه و متخصصان را می طلبد تا با نرم افزارها شناخت
بیستری را برای طراحان رایانه ای و فرهنگ پیشرو در زبان فارسی ایجاد کرد. در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها و
شرایط سخت تایپ به پایان رسد وزمان مورد نیاز شامل حروفچینی دستاوردهای اصلی و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار
گیرد.';
$mobileNews[0]['category']='ماجرایی';
$mobileNews[0]['creater']='حسین رئیسی';

$mobileNews[0]['publicationDate']='۰۳:۳۰:۰۰ ۱۳۹۳/۱۲/۲۵';
$mobileNews[0]['url']="image-5.jpg";
$mobileNews[0]['thumbnail']="t-image-5.jpg";
$mobileNews[0]['fileName']='file5.zip';

$mobileNews[1]['id']=2;
$mobileNews[1]['title']='title2';
$mobileNews[1]['news']='لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان
گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود
ابزارهای کاربردی می باشد. کتابهای زیادی در شصت و سه درصد گذشته، حال و آینده شناخت فراوان جامعه و متخصصان را می طلبد تا با نرم افزارها شناخت
بیستری را برای طراحان رایانه ای و فرهنگ پیشرو در زبان فارسی ایجاد کرد. در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها و
شرایط سخت تایپ به پایان رسد وزمان مورد نیاز شامل حروفچینی دستاوردهای اصلی و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار
گیرد.';
$mobileNews[1]['category']='ماجرایی';
$mobileNews[1]['creater']='حسین رئیسی';
$mobileNews[1]['publicationDate']='۰۳:۳۰:۰۰ ۱۳۹۳/۱۲/۲۵';
$mobileNews[1]['url']="image-5.jpg";
$mobileNews[1]['thumbnail']="t-image-5.jpg";
$mobileNews[1]['fileName']='file5.zip';


$mobileNews[2]['id']=3;
$mobileNews[2]['title']='title3';
$mobileNews[2]['news']='لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان
گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود
ابزارهای کاربردی می باشد. کتابهای زیادی در شصت و سه درصد گذشته، حال و آینده شناخت فراوان جامعه و متخصصان را می طلبد تا با نرم افزارها شناخت
بیستری را برای طراحان رایانه ای و فرهنگ پیشرو در زبان فارسی ایجاد کرد. در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها و
شرایط سخت تایپ به پایان رسد وزمان مورد نیاز شامل حروفچینی دستاوردهای اصلی و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار
گیرد.';
$mobileNews[2]['category']='ماجرایی';
$mobileNews[2]['creater']='حسین رئیسی';
$mobileNews[2]['publicationDate']='۰۳:۳۰:۰۰ ۱۳۹۳/۱۲/۲۵';
$mobileNews[2]['url']="image-5.jpg";
$mobileNews[2]['thumbnail']="t-image-5.jpg";
$mobileNews[2]['fileName']='file5.zip';


?>
<?php echo json_encode($mobileNews,JSON_UNESCAPED_UNICODE); ?>

این هم کد سمنن اندرویدم هست که اطلاعات جیسون رو میخونه و روی دیتابیس ذخیره می کنه 

  @Override
            public void onDataReceive(String data) {
                Cursor check = G.database.rawQuery("SELECT * FROM recent ", null);
                int j = 0;
                while (check.moveToNext()) {
                    j++;
                }
                check.close();

                if (j == 0) {
                    id = 0;
                    G.database.execSQL("INSERT INTO recent(recent_id) VALUES ('" + 0 + "')");
                } else {
                    Cursor des = G.database.rawQuery("SELECT * FROM recent ", null);
                    while (des.moveToNext()) {

                        id = des.getInt(des.getColumnIndex("recent_id"));
                    }
                    des.close();
                }
                try {
                    JSONArray tasks = new JSONArray(data);
                    for (int i = id; i < tasks.length(); i++) {

                        JSONObject object = tasks.getJSONObject(i);
                        StructTask task = new StructTask();
                        task.id = object.getLong("id");
                        task.category = object.getString("category");
                        task.creater = object.getString("creater");
                        task.publicationDate = object.getString("publicationDate");
                        task.url = object.getString("url");
                        task.file = object.getString("fileName");
                        task.thumbnail = "t_" + object.getString("url");
                        task.title = object.getString("title");
                        task.news = object.getString("news");

                        DownloadManager.addToDownloadList(task.thumbnail, task.id);
                        num = task.id;
                        G.database.execSQL("UPDATE recent SET recent_id = '" + task.id + "' ");
                        G.database.execSQL("INSERT INTO task (task_file,task_id,task_category,task_creater,task_title,task_news,task_date,task_thumbnail,task_url) VALUES ('" + task.file + "','" + task.id + "','" + task.category + "', '" + task.creater + "','" + task.title + "','" + task.news + "','" + task.publicationDate + "','" + task.thumbnail + "','" + task.url + "')");
                    }
                }
                catch (JSONException e) {
                    e.printStackTrace();
                }

نظرات

alireza 11 سال پیش
ممنون میشم دوستان و اساتید راهنمایی کنند کجای کد من مشکل داره که باید چیکار کنم این مشکل برطرف بشه
کاشی زاده 11 سال پیش
لطفا از درج سوالات تکراری خودداری فرمایید ، توضیحات لازم در آموزش ها داده شده است .
alireza 11 سال پیش
چیزی که من تو سوال مطرح کردم توی اموزش ها گفته نشده میشه شما راهنمایی کنید باید واسه کاری که گفتم می خوام انجام بدم کدم کجاش مشکل داره ؟
hamidd 11 سال پیش
شما با trace کردن راحت تر می تونین بفهمین مشکل از کجاست. حتما یه if ، یا چیز دیگه ای اشتباه نوشتید.
alireza 11 سال پیش
منظورتون از trace کردن چیه ؟ راستش نمی دونم trace چی هست ؟ استاد تو اموزش ها توضیح دادن ؟
hamidd 11 سال پیش
trace کردن کردن یعنی اجرای خط به خط برنامه. کلمات trace ، debug و دیباگ را در انجمن و یا گوگل جستجو کنید.
alireza 11 سال پیش
اها متوجه شدم ممنون .. ولی جناب پناهی برنامه من از لحاظ اجرا مشکلی نداره و درست کار می کنه من فقط می خوام برای خوندن اطلاعات و ارسال جیسون از سمت سرور نیام هر سری اطلاعات جیسون مربوط به ای دی های که قبلا در دیتا بیس ذخیره شدن رو ارسال کنم و فقط از اون ای دی به بعد رو ارسال کنم سمت اندروید اینکار رو که می کنم دیگه من چیزی رو نمی خونم ولی اگه ای دی های قبلی رو هم همراه این ای دی جدید جیسونشون رو ارسال کنم این ای دی هم خونده میشه و اضافه میشه ... نمی دونم فکر می کنم مربوط به ارایه دو بعدی که سمت سرورم نوشتم یا مربوط به شرایط for هست گفتم شاید کسی قبلا همچین کاری رو کرده بتونه راهنمایی کنه که باید شکل دیگه ای کد بنویسم یا اینی که نوشته شده درسته ؟!
alireza 11 سال پیش
اها متوجه شدم ممنون .. ولی جناب پناهی برنامه من از لحاظ اجرا مشکلی نداره و درست کار می کنه من فقط می خوام برای خوندن اطلاعات و ارسال جیسون از سمت سرور نیام هر سری اطلاعات جیسون مربوط به ای دی های که قبلا در دیتا بیس ذخیره شدن رو ارسال کنم و فقط از اون ای دی به بعد رو ارسال کنم سمت اندروید اینکار رو که می کنم دیگه من چیزی رو نمی خونم ولی اگه ای دی های قبلی رو هم همراه این ای دی جدید جیسونشون رو ارسال کنم این ای دی هم خونده میشه و اضافه میشه ... نمی دونم فکر می کنم مربوط به ارایه دو بعدی که سمت سرورم نوشتم یا مربوط به شرایط for هست گفتم شاید کسی قبلا همچین کاری رو کرده بتونه راهنمایی کنه که باید شکل دیگه ای کد بنویسم یا اینی که نوشته شده درسته ؟!

پاسخ‌ها 1

hamidd 11 سال پیش

شما به جای:

 while (des.moveToNext()) {

id = des.getInt(des.getColumnIndex("recent_id"));
}

اینو بنویسید ببینید چی میشه.

  while (des.moveToNext()) {

id++;
}

البته من وقت نکردم زیاد به کدتون دقت کنم.

نظرات

alireza 11 سال پیش
ممنون از پاسختون ولی مربوط به این موضوعی که گفتین نبود
hamidd 11 سال پیش
مربوط به چی بود. اگه امکانش هست میشه بدونم لطفا؟
alireza 11 سال پیش
مربوط به شرایط for بود درواقع من میومدم اطلاعات ارایه جیسونی که دریافت می کردم رو می گفتم از عنصر id ام به بعد بخون و وقتی میومدم جیسون های قبلی رو حذف می کردم و وفقط جیسون مربوط به اطلاعیه های جدید رو اضافه می کردم دیگه عنصر صفرم این ارایه رو باید می خوندم نه عنصر id ام رو !!! در واقع با حذف متغیر id و گذاشتن صفر مشکل خیلی ساده برطرف شد یه بی دقتی در الگوریتم کار این مشکل رو ایجاد کرده بود ... به هر حال ممنون از پاسختون

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .