PDA

View Full Version : یه نکته جالب و یک سوال درباره JSR 75



dante0747
شنبه 09 شهریور 1387, 22:35 عصر
سلام
چند روز پیش در حال نوشتن یه برنامه بودم و مجبور بودم که از یک فایل بخونم و همزمان در فایل دیگری بنویسم . به دلیل کم بودن حافظه موبایلها (منظورم حافظه موقت است) نمیتونستم فایل را در حافظه لود کنم و کارهای مورد نظررا روش انجام بدم چون exception میده. به هر حال تصمیم گرفتم که ابتدا یک بایت را بخونم , پردازش کنم و سپس در جای دیگری بنویسم و فایل اول را هم پاک کنم. اما یه مشکلی که همیشه در کار با JSR 75 واقعا آزار دهنده است سوالهای بی موردی است که از کاربر پرسیده می شود.اما تصمیم گرفتم این کار را روی یک فایل متنی کم حجم انجام بدم شاید یه راهی برای فرار از این permission ها باشد اما نتیجه نداشت. هنگام run کردن برنامه برای هر بایت اطلاعات که باید نوشته بشه یک سوال برای read و یک سوال برای write می پرسه.
کلافه شده بودم....تصمیم گرفتم تا خواندن اطلاعات را در داخل شرط while قرار دهم.
بنا بر این خواندن در داخل شرط while و نوشتن در داخل بدنه while انجام میشد...
نتیجه برنامه این بار متفاوت از بار قبل بود. این بار فقط سوالهای مربوط به write را می پرسید و از سوالات مربوط به read خبری نبود.


اول خوشحال شدم و خواستم write اطلاعات رو هم در شرط while بنویسم اما متاسفانه کلیه توابعی که برای نوشتن در فایل موجود هستند مقدار بازگشتی ندارند (void write()) و استفاده آنها به عنوان شرط if , while و... در جاوا غیر ممکن است.


حالا با توجه به مطالبی که گفتم راه حل این مشکل غیر از sign کردن midlet چی میتونه باشه......؟


آیا به نظر شما میشه یکی از توابع write را مثل outputstrea.write دستکاری کرد تا یه مقدار بازگشتی داشته باشه...؟


یا اینکه کاری کرد تا تمام alarm ها که در برنامه وجود دارد همگی به صورت default,yes command آنها فعال بشه ؟ (چون تمام سوالها یا به عبارتی permission ها در واقع نوعی alarm هستند که call کردن آنها در اختیار برنامه نویس نیست)
:متفکر::عصبانی++:

dante0747
دوشنبه 11 شهریور 1387, 18:37 عصر
طبق معمول کسی نیست جواب بده.....:متفکر::عصبانی++:

rezaTavak
سه شنبه 12 شهریور 1387, 07:47 صبح
اول اینکه کسی باید اینجا جواب بده که کارش برنامه نویسی موبایله.

دوم ممکنه این فقط روی موبایل شما باشد و روی موبایل دیگری کار نکند برنامه خودتان را روی یک موبایل از کارخانه ای دیگر هم تست کنید. ببینید واقعا این باگ در تمام گوشیها هست؟

dante0747
سه شنبه 12 شهریور 1387, 15:04 عصر
من این نکته را هم رو گوشی خودم تست کردم و هم روی emulator موجود در netbeans .

mic_r_c
یک شنبه 17 شهریور 1387, 13:45 عصر
آقای دانته، شما قبل از حلقه while یک بار فایل رو باز کردی و یک بار هم ازت می پرسه که اجازه خوندن دارم یا نه. ولی تو حلقه while بارها داری write انجام میدی پس بارها ازت می پرسه که اجازه write میدی یا نه.
دیگه این که خوشحالی نداره، معجزه نکردی.

این طور پیغام ها رو هم فقط با امضا کردن میتونی از بین ببری، پس فکرت رو مشغول نکن.

در مورد حافظه هم باید بگم که شما تا 600 کیلو بایت برای nokia و 1.5 مگابایت برای sony ericsson می تونی یکجا برداری.
پس یک بایت یک بایت نخون تا دفعات سوال بیاد پایین. می تونی 300 تایی بخونی. در ضمن من اگه جایه تو بودم از فایل می خوندم و به جایه حافظه اصلی از rms استفاده می کردم.

dante0747
یک شنبه 17 شهریور 1387, 23:44 عصر
اون سوالی که شما میگی برای read می پرسه که جای خود داره...
اگه مطلب را درست می خوندی متوجه میشدی که من یک بایت یک بایت میخوندم و برای همین اگه read را در بدنه حلقه while بذاری میبینی که به تعداد سوالهای write , سوال مربوط به read را هم می پرسه.....
میتونی امتحان کنی....
در ضمن نسخه ای هم که پیچیدی به درد من نمیخوره چون من دقیقا نگفتم که برنامه ام چیه .....
مطمئن باش تمام این راهها رو قبلا رفتم که حالا اومدم و اینجا مطرحش کردم.:متفکر:

mic_r_c
سه شنبه 19 شهریور 1387, 22:01 عصر
در اینصورت من معذرت می خوام.:خجالت:
بهتره من روی کار با بلوتوث تمرکز کنم.:چشمک:
خوب یه نمونه از کارت رو اگه میشه up کن، تا ما هم ببینیم چجوریه.

dante0747
پنج شنبه 21 شهریور 1387, 08:05 صبح
ok اگه بتونم این مشکل را یه جوری برطرف کنم در اولین فرصت برنامه را با توضیحات کامل در یک تاپیک جداگانه up می کنم.

dante0747
چهارشنبه 27 شهریور 1387, 17:54 عصر
سلام.
با توجه به مطالبی که در ابتدای تاپیک گفتم تصمیم گرفتم تا کلاسهای جاوا را دستکاری کنم و توابع مربوط به خواندن را با مقدار برگشتی بازنویسی کنم و با همان نام به جای توابع قبلی قراردهم.
برای این کار ابتدا جای این کلاسها را پیدا کردم. یک سری فایل JAR بود.مثلا jsr75.jar ....
بعد این فایلها (jar) را با نرم افزار WinRAR باز کردم داخل هرکدام از آنها فایلهای مربوط به package ها وجود دارد و....
به هر حال یکی از کلاسها را (OutputStream) را decompile کردم و تغییرات لازم را روش انجام دادم و سپس با NetBeans , کامپایل کردم و در و در همان package قرار دادم و کل فولدر را به فایل jar تبدیل کردم و به جای فایل jar قبلی کپی کردم.
اما وقتی وارد netBeans شدم کارم درست جواب نداد.....
اگه می تونید شما هم این کار ار انجام بدید ببینید جواب میده یا نه؟ و اگه جواب داد خبر بدید...
البته یه راه دیگه برای خلاص شدن از شر این permissionها EQhalmer است.وقتی از کارش مطمئن شدم توضیح میدم.
در ضمن من در گوشی خودم این مشکل(Permission ها) را بر طرف کرده ام چون وقتی می خوام برنامه را در گوشی اجرا کنم اول می رم در قسمت option و در قسمت permissions سوالات مربوط به read و write را حذف می کنم و از این به بعد هنگام اجرای برنامه این سوالات پرسیده نمی شود.اما در سایر گوشیها نمیتونم این کار را بکنم...

parmida64
شنبه 14 دی 1387, 10:19 صبح
در ضمن من اگه جایه تو بودم از فایل می خوندم و به جایه حافظه اصلی از rms استفاده می کردم.[/quote]
سلام منم این مشکلات را داشتم بع همین روش شما به ذهنم رسید و استفاده کردم ولی یک مشکل وجود داره اونم اینه که بعد از خواندن بایت بایت فایل آنها را در buffer میریزم و مقایسه انجام می دم تا به آخر یک خط از فایلم که رسید اون را به عنوان یک رکورد در RMS ذخیره کند .حالا وقتی می خوام مقایسه آخرین بایت از بافر را با علامت مشخص شده در آخر هر خط انجام بدم کل محتویات بافر را با آن مقایسه می کنه . چطوری باید آخرین بایت را برگردانم .؟؟؟؟؟؟؟؟؟؟؟:متفکر::متفکر:
میشه شما بگین از چه روشی استفاده می کنید ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ :خجالت::خجالت: