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

کرش کردن پروژه تبدیل واحد(حل شد)

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

(حل شد)

سلام دوستان.من امروز پروژه تبدیل واحد رو تکمیل کردم ولی یک مشکلی وجود داره برنامه در بعضی مواقع کرش میکنه!

مثلا 1 کیلومتر رو تبدیل نمیکنه!  و برنامه کرش میکنه !

هرچی هم کدهارو پاک میکنم و دوباره مینویسم بازم کرش!

حل شد!

نظرات

Ghost 12 سال پیش
پس کمک کنید! من سورس خود استاد روهم کپی کردم ولی بازم برای کیلومتر کرش کرد!من چیکا کنم!؟ مشکل از خود سورس ها هست!
Ghost 12 سال پیش
داداشا انگاری مشکل از سورس استاد هست چون انگاری نه متر رو تبدیل میکنه نه کیلو متر!
b.fat 12 سال پیش
راستش این جوری جواب دادن خیلی سخته. کرش ممکنه از هر چیزی باشه. وقتی من توی پروژه های ابتدایی بودم، چندین بار مجبور شدم پروژه را پاک کنم (!) و از اول اول اول بنویسم. در logcat درباره علت کرش توضیح می دهد. آنجا دنبال چندین سطر قرمز پشت سر هم باشید. یا آن سطرها را اینجا کپی کنید تا دوستان بتوانند به شما کمک کنند.
maiwand 12 سال پیش
عزیز سورس رو گپی نکن پروژه خودت رو پاک کن و پروژه استاد رو ایمپورت اونوقت اجراش کن چون مشکل میتونه از هر چیزی باشه ونه فقط سورس (مثلا منیفست )
Ghost 12 سال پیش
داداش منیفست رو چک کردم و ... و هزاران جوایز ارزنده دیگر!
amin2525 12 سال پیش
برای من هم همینطور شده بود...از اون راه اول استاد استفاده کردم در نهایت

پاسخ‌ها 7

Ghost 12 سال پیش

نظرات

Criss 12 سال پیش
احتمالا شما یه عدد خیلی بزرگ رو داری تبدیل میکنی < از کیلومتر به میلی متر که تو حافظه ایی که ممکنه int یا long تبدیل کره باشید جا نده < مثلا int فکر کنم حدودا تا عدد 370000 رو میتونه ذخیره کنه (به اموزش های استاد مراجعه کنید)< شما عدد 1 رو برای کیلومتر تست کن میبینید که بخوبی جواب میده همچنین عدد 1000 رو برای میلی متر
Ghost 12 سال پیش
داداش مشکل اینکه اصلا 1 کیلومتر روهم جواب نمیده!
Criss 12 سال پیش
طبق کدی که اسکرین ازش رو گذاشتی شما توی محاسبات از پایین خط سوم مربوط به edtCM پرانتز هارو () درست نزاشتید و دارید کوتیشین هارو "" هم توی محاسبتون تو یک پرانتز گذاشتید
Ghost 12 سال پیش
من که نفهمیدم ! میشه یک نمونه مثال بزنبد!؟
Alireza_Ghamkhar 12 سال پیش
من خودم مثل شما خیلی وقت نیست شروع کردم اما فک کنم خط 85 کدتون ایراد داره... یعنی اینجوری باشه مثل دو خط پایینیش که تو پرانتز باشه بعد با "" جمع بشه. (mm*0.1)+""
Criss 12 سال پیش
دقیقا خط 84 و 85 مشکل داره < "" ها رو از () بیرون ببرید مثل خط 2 خط اخری که نوشتید
Criss 12 سال پیش
البته خط 84 مشکلی نداره فقط یکبار پرانتز اضافه گذاشتید
Ghost 12 سال پیش
داداشا خداوکیلی کمک کنید هرکاری گفتید کردم ولی بازم نشد! کمک کنید!
Ghost 12 سال پیش

نظرات

Ghost 12 سال پیش
اینم متن کرش ! لطفا بگید کجای کار اشتباه هست دارم دیوونه میشم!
Saeed Mozaffari 12 سال پیش
توی متن این کرش خطا رو هز خط 75 گرفته ولی وقتی عکس اول صفحه رو ببینی اونجا فقط یه کوتیشن هست .(عکس همون کدی که الان ازش کرش گرفتی رو بذار)
Ghost 12 سال پیش

نظرات

Alireza_Ghamkhar 12 سال پیش
قسمت های دیگه کدت رو نشون بده شاید مشکل جای دیگری باشد...
ATRAS 12 سال پیش
دوست عزیز شما خطای logcato یبار دیگه اینجا قرار بدین ببینیم اصلا مشکلت از کجاست.بعدشم کد کامل برنامتو هم این جا قرار بده این عکس همه کدو نشون نمیده.
Ghost 12 سال پیش
داداش این اصل کد استاد هستش! یعنی سورس استاد هستش! من نمیدونم مشکل چیه؟
Ghost 12 سال پیش
داداش این کد خود استاد هستش! بعدش پست بالا خطای logcat هست! لطفا برسی کنید!
Programmer 12 سال پیش
سلام.رفيق اينطوري فايده نداره.سورس رو كامل Export و اپلود كن تا من و دوستان يه نگاهي بهش بندازيم.ممنون
Saeed Mozaffari 12 سال پیش

اوووو یافتم... دوست عزیز یه اشتباه واضح شما داخل parsDouble همه ifهاتون نوشتید edtMm درصورتی که برای هر EditText باید مقدار ورودی خود ان گرفته شود .به مثال زیر دقت کن برای edtCm درون Double.parseDouble هم edtCm قرار میگیرد نه edtMm.

 if (edtCm.getText().toString().length() > 0) {
m = Double.parseDouble(edtCm.getText().toString()) * 0.01;
}

نظرات

Ghost 12 سال پیش
داداش میشه دقیق تر بگی! نفهمیدم!
Saeed Mozaffari 12 سال پیش
عزیز من تو این کدی که برای شمانوشتم دوتا edtCm وجود داره.ولی شما توی کدتون به جای edtCm دومی نوشتی edtMm
Programmer 12 سال پیش
saeedmozaffari شما اشتباه ميكني.يه لحظه فكر كردم درست ميگي ولي به سورس مراجعه كردم.اينطور نيست.parsDouble همه ي if ها بايد برابر edtMm باشه (طبق سورس) !
Saeed Mozaffari 12 سال پیش
خوب عزیزان اگه به اون قسمت آموزش دقت کرده باشید استاد برای آخرین بار این کدها رو تست نکردن و به همین دلیل در حین آموزش متوجه این اشتباه نشدن. ..... مثلا شما برای تبدیل مقدار Km باید عددی که کاربر درون این فیلد قرار داده رو بگیرید نه این که همیشه اعداد درون edtMm گرفته بشه که درون این کد این اشتباه وجود داره.
Ghost 12 سال پیش
یعنیاشتباه از از استاد هستش؟ استاد سورس رو اشتباه نوشته؟
Saeed Mozaffari 12 سال پیش
استاد در حال توضیح دادن نکات دیگه بودن. نعوذبالله خدا که نیستن .
Ghost 12 سال پیش
میدونم یعنی منظورتون اینکه اشتباه کردند توس سورس! اگه اشتباه کردند بگو تو تاپک مطرح کنیم بقیه هم بفهمند!
Programmer 12 سال پیش
saeedmozaffari عزيز شما درست ميگي.من شرمندم.من سورس استاد رو نگاه كردم و طبق اون قضاوت كردم در حالي كه خودم اين اشتباه رو در نوشتن كدهام نداشتم.حلال كنيد مارو.بازم عذر ميخوام
Ghost 12 سال پیش
saeedmozaffari اگه میشه جواب بدید!
Criss 12 سال پیش

سلام داداش پروژه ای که اپلود کردی رو من سورستو نگاه کردم متوجه شدم که شما سورس رو که کپی کردی فراموش کردی بعد از IF متغیر edtMm رو تغییر بدید و همونجوری که کپی کردی جا گذاشتی برای همین هربار که کد اجرا میشه مقدار edtMm خالی دریافت میشه و یک null ضربدر یک عدد میشه که برنامه هنگ میکنه

                 if (edtMm.getText().toString().length() > 0) {
mm = Double.parseDouble(edtMm.getText().toString());
}

if (edtCm.getText().toString().length() > 0) {
mm = Double.parseDouble(edtMm.getText().toString()) * 10.0;
}

if (edtM.getText().toString().length() > 0) {
mm = Double.parseDouble(edtMm.getText().toString()) * 1000.0;
}

if (edtKm.getText().toString().length() > 0) {
mm = Double.parseDouble(edtMm.getText().toString()) * 1000000;
}

سورس درست به صورت زیر هست

                  if (edtMm.getText().toString().length() > 0) {
mm = Double.parseDouble(edtMm.getText().toString());
}

if (edtCm.getText().toString().length() > 0) {
mm = Double.parseDouble(edtCm.getText().toString()) * 10.0;
}

if (edtM.getText().toString().length() > 0) {
mm = Double.parseDouble(edtM.getText().toString()) * 1000.0;
}

if (edtKm.getText().toString().length() > 0) {
mm = Double.parseDouble(edtKm.getText().toString()) * 1000000;
}

نظرات

Ghost 12 سال پیش
داداش دست دردنکه درست شد!
ATRAS 12 سال پیش
دوست گرامی به جای اینکه برنامرو دانلود کنین از رو خود ویدیو ها برنامتونو بسازین این مشکلات براتون پیش نمیاد.
Ghost 12 سال پیش
منم از روی خود برنامه ساختم دیدم نشد سورس رو دانلود کردم دیدم نشد! تاحالا که این دوست عزیز راهنمایی کرد! من از هرکی پرسیدم بیشتر افراد اینجا اشتباه نوشتند چون استاد اشتباه نوشته! حالا استاد اشتباه نوشته فکر کنم برای اینکه مارو امتحان کنه!
Ghost 11 سال پیش
@Criss سلام ! من بعد یک ماه دوباره یادی از این پروژه کردم :) فقط من متوجه نشدم شما اون موقع چی گفتی ! آخه 1 ساعت هست دارم نگاه میکنم میبینم این دوتا کدی که نوشتی باهم فرقی نداره ! اما وقتی کد دومی رو مینویسم دیگه برنامه کرش نمیکنه ! میشه یک بار دیگه توضیح بدی ؟ ممنون
ajn91 11 سال پیش
به پارامتر های داخل Double.parseDouble دقت کنید در کد اول برای تمام این متد های یک مقدار edtMm.getText().toString() ارسال میشه که اشتباه هست اما در کد دوم برای هر edt که چک میشه مقدار همون رو به عنوان پارامتر به متدی که گفتم ارسال میکنه
Ghost 11 سال پیش
دوستان ببخشید ولی من بازم متوجه نشدم:) این دوتا کد باهم مو نمی زنه ! هرچی نگاه میگم میبینم این دوتا کد یکی هست ! میشه بیشتر راهنمایی کنید ؟
Saeed Mozaffari 11 سال پیش

معنی این کد چیه؟ معنیش اینه که  اگر فیلد edtCm مقدار داشت , بعد برو داخل بلاک و در بلاک نوشته شده مقدار فیلد edtCm رو بگیر و ضرب در 10 بکن که تبدیل به mm بشه . خوب این جواب درست بود .

 
if(edtCm.getText().toString().length()>0){
mm =Double.parseDouble(edtCm.getText().toString())*10.0;
}

****************************************************************************************************************حالا در کد اشتباه چی نوشته شده؟ نوشته شده که اگر فیلد edtCm مقدار داشت , بعد برو داخل بلاک , اما تفاوتش در اینه که میگه مقدار edtMm رو بگیر و ضرب در 10 بکن و در mm قرار بده.((یعنی میلی متر ضرب در 10  دوباره میشه میلی متر؟؟؟؟ !!!!! ))

و البته دلیل کرش چیه ؟ دلیلش اینه که , مثلا وقتی شما فیلد edtCm (سانتی متر) رو پر میکنید و می خواهید که تبدیلش کنید با توجه به این کد ,  مقدار edtMm(میلی متر) گرفته میشه در صورتی که شما میخواهید که مقدار سانتی متر گرفته بشه و اصلا مقداری درون فیلد میلی متر قرار ندادید  و مقدار آن null هست, در نتیجه برنامه شما می خواد که مقدار null رو بگیره و ضرب در 10 بکنه!((یعنی عدد پوچ ضرب در 10 !!!! )) که منجر به کرش میشه.

 
if(edtCm.getText().toString().length()>0){
mm =Double.parseDouble(edtMm.getText().toString())*10.0;
}

نظرات

Ghost 11 سال پیش
آهان ! پس بگو من کجا اشتباه می کردم ! دست درد نکنه دوست عزیز !
M.Karimi 11 سال پیش

دوستان من با نمونه کد اول استاد هم مشکل دارم . برای بار اول که کانورت میکنم برنامه درست اجرا میشه ولی  دوباره که عدد میدم و کانورت میکنم کرش میکنه .

            btnConvert.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
if (edtMm.getText().toString().length() > 0) {
double value = Double.parseDouble(edtMm.getText().toString());
edtCm.setText("" + (value * 0.1));
edtM.setText("" + (value * 0.001));
edtKm.setText("" + (value * 0.000001));
return;
}

if (edtCm.getText().toString().length() > 0) {
double value = Double.parseDouble(edtCm.getText().toString());
edtM.setText("" + (value * 0.01));
edtKm.setText("" + (value * 0.0001));
edtMm.setText("" + (value * 10.0));
return;

}

}
});

نظرات

M.Karimi 11 سال پیش
نمیدونم مشکل چی بود ولی یه بار کدهارو از اول نوشتم درست شد.
Ghost 11 سال پیش
اگه خواستی میتونی کل پروژه رو آپلود کنی و اینجا لینک کنی تا ببینم مشکل چیه ! توی این چند خط که مشکل نبود !
M.Karimi 11 سال پیش
نه انگار حل شده مشکل . ممنون.

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