سلام . من یه سری اطلاعات به صورت کد هگز توی یه آبجکت دارم که می خوام بخونمشون. کاری که کردم به صورت زیر هست:
String data = msg.obj.toString();
byte[] data1 = data.getBytes();
اینجا msg همون اطلاعاتیه که به صورت هگز دارم. اول به صورت string ازش خوندم اطلاعات رو بعد getbyteش کردم . این کد کار میکنه فقط وقتی مشکل پیش میاد که اون کد هگز مقدارش بیشتر از 127 باشه که دلیلشم اینه که byte بین -128 تا 127 رو ذخیره میکنه. راه حل دیگه ای دارید که مشکلم رو برطرف کنه؟
بهتره خطاها رو مدیریت کنید. برای مثال:
String data = msg.obj.toString();
byte[] data1;
try {
data1 = data.getBytes();
} catch (Exception e) {
Toast.makeText(this, "Invalid data", Toast.LENGTH_SHORT).show();
}
ممنون . ولی صورت مسئله پاک شد:) .احتمالا من منظورمو خوب بیان نکردم. من می خوام اون عددهای بزرگتر رو هم بخونم
خوب مشکل اینه که اعداد خارج از این محدوده اصلاً توی بازهی byte نیستن. شما میخواین عددی مثل 150 رو تبدیل به byte کنید درحالی که توی این فضای یکبایتی جا نمیشه
هدفم این بود یه متغییر و روش دیگه معرفی کنید که توی اون متغییر ذخیره ش کنم . مهم نیست چه متغییری . من فقط می خوام اون اعداد رو داشته باشم.حتی به صورت هگزم باشه اشکال نداره . فقط از اون آبجکت بیاد بیرون. چون وقتی data رو توی یه تکست ویو نشون میدم هیچی نشون نمیده
یه نمونه از رشتهی ورودی و خروجیای که میخواین ازش بگیرین بگذارین تا ببینم چه راهحلی میشه براش درنظر گرفت.
مشکل اینه که دقیقا نمیدونم اطلاعات به چه صورت توی msj ذخیره شدن . به خاطر اینکه این اطلاعات از یه ماژول سخت افزاری جدا از طریق پورت میکرو usb موبایل به گوشی منتقل میشن. این دو خط کدی که گذاشتم به صورت سعی و خطا با کلی دردسر پیدا کردم ولی برای اعداد کوچیکتر از 127 کار میکنه و هر چند تا عدد که توی msj ذخیره شده باشن رو به صورت آرایه ای بایتی توی byte ذخیره میکنه. بعدش دنبال این گشتم که به جای بایت اونها رو به صورت int ذخیره کنم ولی چیزی پیدا نکردم . وقتی خود data رو توی تکست ویو نشون میدم فقط و فقط یه علامت سوال توی یک شکل ذوزنقه ای نشون میده به صورتی که تو لینک زیر گفته:
http://stackoverflow.com/questions/32008...ew-android
یه نمونه از دیتایی که میاد رو با Log توی پنجرهی LogCat نمایش بدین و بعد کپی کنید اینجا بگذارین تا ببینیم چه دیتایی دریافت میشه.
تا حالا از genymotion برای شبیه سازی کار با usb host استفاده نکردم . به نظرتون میشه همچین کاری کرد؟ یه سرچ کردم چند جا گفتن میشه ولی آموزش خوبی پیدا نکردم.
اگر هم با گوشی واقعی دیباگ کنم دیگه نمیتونم اون ماژول رو بهش وصل کنم
پلاگین WiFi ADB رو روی اندروید استودیو نصب کنید. بعد گوشی رو وصل کنین و بعد از اینکه گوشی رو شناخت، کلیدهای Ctrl+Alt+Shift+W رو بزنید تا بصورت بیسیم بهش وصل بشه (گوشی و کامپیوتر باید به یک شبکهی مشترک وصل باشن). بعد از پیغام اتصال، میتونین گوشی رو جدا کنین و با WiFi برنامه رو اجرا کنین و ماژول رو به USB گوشی وصل کنین. همیشه همینکار رو با گوشی واقعی خودتون انجام بدین حتی اگه به ماژول نیاز ندارین چون اتصال مداوم به USB باعث میشه گوشی دائم در وضعیت شارژ بمونه و باتری رو در درازمدت خراب میکنه.
انجام دادم . به همون شکلی که تو texeView نشون میده تو log هم همونجوری نشون میده.
این کد که چیزی ازش معلوم نیست. اینو امتحان کنید ببینید چی توی آرایه ذخیره میشه:
String data = msg.obj.toString();
char[] data1;
try {
data1 = data.toCharArray();
} catch (Exception e) {
Toast.makeText(this, "Invalid data", Toast.LENGTH_SHORT).show();
}
خب الان بخوام data1 رو نشون بدم باید به string تبدیلش کنم و بازم تبدیل میشه به همون کاراکترهای علامت سوال.
شما کدی که گذاشتم رو امتحان کردین؟