آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

Ghost  11 سال پیش  11 سال پیش
+2 0

(حل شد)

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

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

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

حل شد!

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

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

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

0 0
قسمت های دیگه کدت رو نشون بده شاید مشکل جای دیگری باشد... (11 سال پیش)
+1 0
دوست عزیز شما خطای logcato یبار دیگه اینجا قرار بدین ببینیم اصلا مشکلت از کجاست.بعدشم کد کامل برنامتو هم این جا قرار بده این عکس همه کدو نشون نمیده. (11 سال پیش)
0 0
داداش این اصل کد استاد هستش! یعنی سورس استاد هستش! من نمیدونم مشکل چیه؟ (11 سال پیش)
0 0
داداش این کد خود استاد هستش! بعدش پست بالا خطای logcat هست! لطفا برسی کنید! (11 سال پیش)
+1 0
سلام.رفيق اينطوري فايده نداره.سورس رو كامل Export و اپلود كن تا من و دوستان يه نگاهي بهش بندازيم.ممنون (11 سال پیش)
0 0
لینک (11 سال پیش)
پاسخ به سوال 
Saeed Mozaffari  11 سال پیش
+4 0

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

 if (edtCm.getText().toString().length() > 0) {
m = Double.parseDouble(edtCm.getText().toString()) * 0.01;
}
0 0
داداش میشه دقیق تر بگی! نفهمیدم! (11 سال پیش)
+1 0
عزیز من تو این کدی که برای شمانوشتم دوتا edtCm وجود داره.ولی شما توی کدتون به جای edtCm دومی نوشتی edtMm (11 سال پیش)
+1 0
saeedmozaffari شما اشتباه ميكني.يه لحظه فكر كردم درست ميگي ولي به سورس مراجعه كردم.اينطور نيست.parsDouble همه ي if ها بايد برابر edtMm باشه (طبق سورس) ! (11 سال پیش)
+1 0
خوب عزیزان اگه به اون قسمت آموزش دقت کرده باشید استاد برای آخرین بار این کدها رو تست نکردن و به همین دلیل در حین آموزش متوجه این اشتباه نشدن. ..... مثلا شما برای تبدیل مقدار Km باید عددی که کاربر درون این فیلد قرار داده رو بگیرید نه این که همیشه اعداد درون edtMm گرفته بشه که درون این کد این اشتباه وجود داره. (11 سال پیش)
0 0
یعنیاشتباه از از استاد هستش؟ استاد سورس رو اشتباه نوشته؟ (11 سال پیش)
+1 0
استاد در حال توضیح دادن نکات دیگه بودن. نعوذبالله خدا که نیستن . (11 سال پیش)
0 0
میدونم یعنی منظورتون اینکه اشتباه کردند توس سورس! اگه اشتباه کردند بگو تو تاپک مطرح کنیم بقیه هم بفهمند! (11 سال پیش)
+1 0
saeedmozaffari عزيز شما درست ميگي.من شرمندم.من سورس استاد رو نگاه كردم و طبق اون قضاوت كردم در حالي كه خودم اين اشتباه رو در نوشتن كدهام نداشتم.حلال كنيد مارو.بازم عذر ميخوام (11 سال پیش)
+1 0
خواهش میکنم آقا مهدی. (11 سال پیش)
0 0
saeedmozaffari اگه میشه جواب بدید! (11 سال پیش)
پاسخ به سوال 
Criss  11 سال پیش
+5 0

سلام داداش پروژه ای که اپلود کردی رو من سورستو نگاه کردم متوجه شدم که شما سورس رو که کپی کردی فراموش کردی بعد از 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;
}
0 0
داداش دست دردنکه درست شد! (11 سال پیش)
+2 0
دوست گرامی به جای اینکه برنامرو دانلود کنین از رو خود ویدیو ها برنامتونو بسازین این مشکلات براتون پیش نمیاد. (11 سال پیش)
+1 0
منم از روی خود برنامه ساختم دیدم نشد سورس رو دانلود کردم دیدم نشد! تاحالا که این دوست عزیز راهنمایی کرد! من از هرکی پرسیدم بیشتر افراد اینجا اشتباه نوشتند چون استاد اشتباه نوشته! حالا استاد اشتباه نوشته فکر کنم برای اینکه مارو امتحان کنه! (11 سال پیش)
0 0
@Criss سلام ! من بعد یک ماه دوباره یادی از این پروژه کردم :) فقط من متوجه نشدم شما اون موقع چی گفتی ! آخه 1 ساعت هست دارم نگاه میکنم میبینم این دوتا کدی که نوشتی باهم فرقی نداره ! اما وقتی کد دومی رو مینویسم دیگه برنامه کرش نمیکنه ! میشه یک بار دیگه توضیح بدی ؟ ممنون (11 سال پیش)
+1 0
به پارامتر های داخل Double.parseDouble دقت کنید در کد اول برای تمام این متد های یک مقدار edtMm.getText().toString() ارسال میشه که اشتباه هست اما در کد دوم برای هر edt که چک میشه مقدار همون رو به عنوان پارامتر به متدی که گفتم ارسال میکنه (11 سال پیش)
0 0
دوستان ببخشید ولی من بازم متوجه نشدم:) این دوتا کد باهم مو نمی زنه ! هرچی نگاه میگم میبینم این دوتا کد یکی هست ! میشه بیشتر راهنمایی کنید ؟ (11 سال پیش)
پاسخ به سوال 
Saeed Mozaffari  11 سال پیش
+4 0

معنی این کد چیه؟ معنیش اینه که  اگر فیلد 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;
}
0 0
آهان ! پس بگو من کجا اشتباه می کردم ! دست درد نکنه دوست عزیز ! (11 سال پیش)
پاسخ به سوال 
M.Karimi  11 سال پیش
0 0

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

            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;

}

}
});
0 0
نمیدونم مشکل چی بود ولی یه بار کدهارو از اول نوشتم درست شد. (11 سال پیش)
0 0
اگه خواستی میتونی کل پروژه رو آپلود کنی و اینجا لینک کنی تا ببینم مشکل چیه ! توی این چند خط که مشکل نبود ! (11 سال پیش)
+1 0
نه انگار حل شده مشکل . ممنون. (11 سال پیش)

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