کرش کردن پروژه تبدیل واحد(حل شد)
اوووو یافتم... دوست عزیز یه اشتباه واضح شما داخل parsDouble همه ifهاتون نوشتید edtMm درصورتی که برای هر EditText باید مقدار ورودی خود ان گرفته شود .به مثال زیر دقت کن برای edtCm درون Double.parseDouble هم edtCm قرار میگیرد نه edtMm.
if (edtCm.getText().toString().length() > 0) {
m = Double.parseDouble(edtCm.getText().toString()) * 0.01;
}
سلام داداش پروژه ای که اپلود کردی رو من سورستو نگاه کردم متوجه شدم که شما سورس رو که کپی کردی فراموش کردی بعد از 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;
}
معنی این کد چیه؟ معنیش اینه که اگر فیلد 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;
}
دوستان من با نمونه کد اول استاد هم مشکل دارم . برای بار اول که کانورت میکنم برنامه درست اجرا میشه ولی دوباره که عدد میدم و کانورت میکنم کرش میکنه .
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;
}
}
});
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .



