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

خالی بودن EditText

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

سلام دوستان ! من دارم روی یه پروژه ای کار میکنم ایشالا امروز تموم میشه میدم بازار !

خب یه سوالی داشتم ! توی این نرم افزار من تقریبا 5 تا EditText وجود داره که کاربر باید توش عدد وارد کنه !

خب حالا اگه یدونه از این ادیت تکست ها خالی باشه برنامه کرش میکنه ! باید همه ادیت تکست ها پر باشه و یک عددی درونش باشه و اون عدد به یک Activity دیگه انتقال پیدا کنه و روی اون عدد کاربر یک محاسبه ای بشه و درجایی مثل TextView عدد محاسبه شده نمایش داده بشه !

خب حالا چیکار کنم تا اگه کاربر توی یک ادیت تکست عددی نداده بود برنامه کرش نکنه ! آخه همه ادیت تکست ها اجباری نیست توش باشه و باید بعضی هاش خالی باشه !

ممنون میشم راهنمایی کنید و بگید چیکار کنم !

نظرات

خود ادیت تکست مهم نیست. مهم متغیری هست که با مقدار وارد شده کاربر در ادیت تکست مقداردهی میشه.شما باید برای اون متغیر فکری بکنی. باید همه متغیرهایی که در برنامه استفاده میکنی برای اطمینان مقداردهی اولیه کنی که احیانا Null نباشن. باید به خطایی که موقع کرش کردن در لوگ کت ظاهر میشه دقت کنی ببینی از چه نوع خطایی هست. اگه NullpoitException باشه صد در صد توی مقدار دهی اولیه متغیرها مشکل داری. باید الگوریتمی برای حالتی که کاربر توی ادیت تکست چیزی وارد نکرده در نظر بگیری که متغیر مربوطه اش با چه چیزی مقداری دهی بشه. اگه اطلاعات بیشتری بدی شاید بشه بهتر راهنمایی کرد. البته خود ادیت تکست هم میشه مقدادهی اولیه کرد و مقدار صفر توش در نظر گرفت. اگه کاربر چیزی وارد کرد که ازش استفاده میکنی و اگر هم توی ادیت تکست چیزی وارد نکرد که مقدار اولیه اش برابر صفر خواهد بود. حالا گیرم اگه محاسباتی که انجام میدی مثلا یه مقداری تقسیم بر مقدار وارد شده در ادیت تکست میشه اگه مقدار اولیه ادیت تکست صفر باشه خوب خطای تقسیم بر صفر بوجود میاد. شما اول باید دقیقا مشخص کنی که کرشت از چه نوعی هست.
Ghost 11 سال پیش
من هنوز محاسبه ای انجام ندادم ! فقط اطلاعات رو انتقال دادم به یک Activity دیگه ! و هنوز اطلاعات رو نگرفتم ! خطایی هم که میده از نوع NullpoitException نیست و از نوع FATAL Exception هست ! خب اگه اطلاعات دیگه ای لازمه بگید تا بهتون بدم ! ممنون از اینکه جواب دادید امیدوار ام حلش کنیم !
Ghost 11 سال پیش
میگم دوستان اگه میخواهید پروژه رو آپلود کنم و لینک کنم بدم برسی کنید ! چیکار کنم ؟
Hossein Kurd 11 سال پیش
آپلود کن ، ولی الان شرکت هستم ، شب جوابت رو می دم
Ghost 11 سال پیش
@Hossein.Kurd ممنون دوست عزیز ! فقط شب یکم دیره ! میخوام زودی تموم کنم چون کار دیگه ای نداره ! همش تکمیله ! به هر حال من آپلود کردم اگه کس دیگه ای بود بگه پروژه رو بهش بدم ! موفق باشید
Ghost 11 سال پیش
یه چیزی رو یافتم ! شما اگه دقت کنی توی پروژه استاد که بود TestActivitys اگه یه مقدار خالی بدی پروژه بدون هیچ خطایی کار میکنه و اصلا کرشی صورت نمیگیره و txtCaption هم Set Text میشه با یه چیز خالی ! همین یعنی اینکه من یه جای کار خطا کردم ! بازم امتحان میکنم خبرش رو میدم !

پاسخ‌ها 8

بانوی شرقی 11 سال پیش

EditText et = (EditText) findViewById(R.id.edtMessage);
                String text = et.getText().toString();

                if (text.matches(""))
                {
                    Toast.makeText(getApplicationContext(), "شما هنوز پیامی درج نکردید !!!", Toast.LENGTH_LONG).show();
                }

نظرات

Ghost 11 سال پیش
ممنون از پاسخگویی شما ولی همونجور که گفتم همه ادیت تکست ها اجباری نیست و اختیاری هست ! یعنی ممنکه از این 5 تا ادیت تکست کاربر فقط یکیش رو پر کنه ممکنه 5 تاش رو پرکنه ! و اختیاریه ! حالا چیکار کنم ؟
بانوی شرقی 11 سال پیش
میدونم.اینو از یه نمونه پروژه نوشتم براتون. شما دستور داخل if رو تغییر بدید
Ghost 11 سال پیش
آره ! فکر خوبیه ! فقط matches این وسط چیه که ازش خطا میگیره ؟
بانوی شرقی 11 سال پیش
یه تابع س برای رشته ها. از اسمش که مشخصه چیکار میکنه. میگه اگه رشته با '' مچ بود ، یعنی اینکه رشته مون خالی باشه
بانوی شرقی 11 سال پیش
یه تابع س برای رشته ها. از اسمش که مشخصه چیکار میکنه. میگه اگه رشته با ''" مچ بود ، یعنی اینکه رشته مون خالی باشه
Hossein Kurd 11 سال پیش

بجای matches می توین بزنی equals یا بنویسی text.lenght()<1 ، یا اصلا توی خاصیت 

edt.addTextChangedListener(new TextWatcher() {

   public void afterTextChanged(Editable s) {}

   public void beforeTextChanged(CharSequence s, int start,
     int count, int after) {
   }

   public void onTextChanged(CharSequence s, int start,
     int before, int count) {
      Field2.setText("");
   }
  });

توی بخش onTextChanged تعیین کنی اگر EditText خالی بود :

edt.setTexr("0");

نظرات

Ghost 11 سال پیش
من دقیقا دستور بانوی شرقی رو کپی کردم و فقط مقدارش رو عوض کردم ! ولی بازم کرش کردم ! نمیدونم باید دستورات رو کجا بنویسم ! نکنه باید دستورات رو هنگام ارسال اطلاعات هم بنویسم ؟ آخه من فقط هنگام خوندن اطلاعات دستورات رو نوشتم ! میشه بیشتر توضیح بدید دوستان :)
Hossein Kurd 11 سال پیش
از این روشی که گفتم استفاده کن و مقدار اولیه رو هم 0 بذار (اگر مقداد ورودی int هست) ، تست کن
Ghost 11 سال پیش
بازم کرش ! حالا که اینجوری شد من یه جایی از کد خطا کردم ! ولی هرچی میگردم پیدا نمیکنم ! براداشتم دقیقا کدهای استاد توی بخش TestActivitys رو کپی کردم ! ولی بازم کرش کردم ! ای خدا ! چیکار کنم حالا ؟
Hossein Kurd 11 سال پیش
هنگام کرش چه پیغامی رو توی لاگ کت نشون می ده؟
Ghost 11 سال پیش
خطای FATAL Exception ! دقیقا موقع خوندن اطلاعات ادیت تکست !
Hossein Kurd 11 سال پیش
edit text رو معرفی کردی ؟ findviewbyid ؟
Hossein Kurd 11 سال پیش
ببین دقیقا به کدوم خط ایراد می گیره و اون خط چیه ؟
Ghost 11 سال پیش

@Hossein.Kurd بله ! ادیت تکست رو معرفی کردم ! دارم میگم سورس استاد رو کپی کردم ! دقیقا از این خط ایراد میگیره :

 int userAge = Integer.parseInt(edtsad.getText().toString());
Intent intent = new Intent(ActivitySecond.this, ActivityBeshmar.class);
intent.putExtra("USER_AGE", userAge);
ActivitySecond.this.startActivity(intent);

نظرات

Hossein Kurd 11 سال پیش
خب وقتی چیزی توش نیست چطور مقدار رو برگردونه ؟ مقدار اولیه 0 و کاری رو هم که گفتم انجام بده همچنین edittext مقادیر ورودیش number باشه تا کاربر نتونه مقدار غیر عددی وارد کنه
Ghost 11 سال پیش
سورس رو تعویض کردم ! شما به سورس بالا دقت کن ! کپی پیست سورس استاده دیگه ! الان اینجا چه مشکلی داره توی این سورس !
Hossein Kurd 11 سال پیش
اکتیویتی فعلی ActivitySecond هست ؟ و میخواهی به ActivityBeshmar بری؟
Ghost 11 سال پیش
دقیقا زدی تو خال ! ActivitySecond دقیقا Activity فعلی هست و میخوام کوچ کنم به ActivityBeshmar و اطلاعات وارد شده رو پس از یکسری محاسبه توی ActivityBeshmar نشون بدم ! یافتی مشکل رو ؟
Hossein Kurd 11 سال پیش

ابتدا edtsad.getText().toString() رو بریز توی متغیر String بعد بگو اگر خالی بود اون رو برابر 0 قرار بده و ادامه ماجرا :

                String strUserAge = edtsad.getText().toString();
if(strUserAge.equals("")){ strUserAge = "0" } int userAge = Integer.parseInt(strUserAge); Intent intent = new Intent(ActivitySecond.this, ActivityBeshmar.class); intent.putExtra("USER_AGE", userAge); ActivitySecond.this.startActivity(intent);

چقدر تو تنبلی

نظرات

Ghost 11 سال پیش
برارد عزیز شما تاحالا به پروژه TestActivity استاد دقت کردی ؟ من دقیقا اون پروژه رو کد هاش رو کپی پیست کردم ! درست؟ خب کرش کردم ! درصوتی که توی پروژه استاد اصلا کرشی توی کار نبود ! بود ؟ نبود ! الان حتی با کد شما هم کار نمیده ! مشکل از جای دیگه ای !
Hossein Kurd 11 سال پیش
خب همینه ، کاری رو که خودت انجام ندی نمی تونی 100% سر در بیاری . خودت انجام بده ؛ از اول
Ghost 11 سال پیش
منم خودم انجام دادم ! دیدم کرش کردم ! تا اینکه نیم ساعت پیش پروژه استاد رو کپی کردم ببینم حل میشه بازم نشد !
Hossein Kurd 11 سال پیش
دقیقا به چی ایراد می گیره؟ پروژه رو آپلود کن و لاگ کامل خطا رو بذار
mohsen-jj 11 سال پیش
سلام شما مگه مشکلتون این نیست که وقتی EditText خالی باشه برنامه کرش می کنه ؟
Hossein Kurd 11 سال پیش
مشکل اینجاست که نمی دونه مشکل از کجاست
Ghost 11 سال پیش
الان مشکل ام این شده که چه پر باشه چه خالی کرش میکنه !
Hossein Kurd 11 سال پیش
تو هنوز لاگ خطا رو نذاشتی ببینیم در ضمن محتوای فایل xml اکتیویتی جاری بعلانه نحوه تعریف کردن edittext رو بذار شاید نامش رو توی findviewbyid اشتباه دادی یا نام تکراریه
mohsen-jj 11 سال پیش
پر باشه دیگه چرا ؟؟ مشکل خالی بودنش و اینکه اگه خالی باشه رو میتونم راهنماییتون کنم
Ghost 11 سال پیش
والا اصلا نمیدونم ! اینقدر Activity تو Activity شده که اصلا چیزی معلوم نیست ! پروژه رو آپلود کنم ببینید ؟
Ghost 11 سال پیش

اینم   LogCat  این بار از ActivityBeshmar خطا گرفت :

نظرات

Hossein Kurd 11 سال پیش
خدایا از دست این ، خط 23 از ActivityBeshmar چیه؟
Ghost 11 سال پیش
خط 23 ActivityBeshmar هست : txtCaption.setText (userAge ! همین !
Hossein Kurd 11 سال پیش

خب userAge کدومه ؟ همین کدی که دادی یا از جایی دیگه می آد ؟ اینو ابتدا مشخص کن

بعد این رو بزن :

 txtCaption.setText ("" + userAge);

نظرات

Ghost 11 سال پیش
متوجه نشدم برادر ! میشه واضح تر بگی ؟ ممنون
mohsen-jj 11 سال پیش
پروژه رو اپلود کنید ببینم
Ghost 11 سال پیش
برادر لینک رو برات ارسال کردم ! لطفا پیام خصوصی هات رو برسی کن !
Programmer 11 سال پیش
userAge رو خالی توی پرانتز ننویس.همونطور که اقای کرد گفتن userAge رو توی پرانتز + یک String با مقدار خالی کن
Ghost 11 سال پیش
من فهمیدم مشکل از اینجا نیست ! چون حتی پروژه استاد توی پروژه من کار نمیده ! احتمال زیاد مال اندروید مانیفست یا.. هست !
Programmer 11 سال پیش
راستی اکتیویتی ها رو توی منیفست تعریف کردی ؟
Ghost 11 سال پیش
@مهدی خسروی : آره ! توی منیفست هم تعریف کردم ! اصلا معلوم نیست چی به چیه !
Programmer 11 سال پیش
اگه دوست داشتی پروژتو بفرست برات برسیش کنم ببینم میتونم چیزی بفهمم یا نه ...
Ghost 11 سال پیش
@mohsen-jj و @مهدی خسروی : بلاخره چیزی فهمیدید یا نه ؟
mohsen-jj 11 سال پیش
میگم اینکه یدونه EditText بیشتر نیست گفتید چنتا هست
Ghost 11 سال پیش
خب اونا رو پاک کردم تا بهتر بتونم حل کنم مشکل رو ! راستی ایدم خوبه ؟
Hossein Kurd 11 سال پیش
ربطی به منیفست نداره داره به خط 23 از اکتیویتی مقصد ایراد می گیره ، مقدار userAge رو توی اکتیویتی مقصد چطور بدست آوردی
mohsen-jj 11 سال پیش

دوست عزیز بیشتر دقت کنید !! :| توی کلاس ActivityBeshmar قسمت setContentView() شما form 7 رو انتخاب کردید و بعد توی همین کلاس تکست ویو به اسم txtCaption ساختید  ، درحالیکه txtCaption اصلا داخل form7 وجود نداره ! احتمالا منظورتون form4 بوده چون این تکست ویو توش هست .

راستی اگه میخوای بررسی کنی که editText خالی هست یا نه از تابع زیر استفاده کن اگه true برگردوند معلومه که editText خالیه .

 privateboolean isEmpty(EditText etText){
return etText.getText().toString().trim().length()==0;
}

نظرات

Ghost 11 سال پیش
ایول برادر ! عجب خنگی ام من ! صبح تا حالا درگیرش شدم ! حالا در کل به نظرت ایدش خوبه ؟
Programmer 11 سال پیش
درست میگن.گفتی استالتو از فرم 7 بگیر که توش یه تکست ویو هست با id ـه txtCaption در حالی در فرم 7 همچین چیزی وجود نداره.پروژه رو باز سازی و برات پ.خ کردم
Hossein Kurd 11 سال پیش
خب من هم از ظهر دارم همینو می گممممممممممممممممممممممممممممممممممم پست سوم رو ببین
Ghost 11 سال پیش
ممنون مهدی جان ! دانلود کردم وایمپورت کردم ! نگفتید ایدش خوب بود ! نکنه خوب نیست ؟
mohsen-jj 11 سال پیش
برا شروع خوبه :) اونم تو این وضعیت کمبود ایده ! همیشه وقتی پروژه ت ارور میده اول از همه برید سراغ اشتباه های رایج مثل همین اشتباه خودتون یا تعریف نکردن کلاس در منیفست .
Programmer 11 سال پیش
اقای کرد دوستمون یکم بی دقت و عجول هستن متاسفانه :(
Programmer 11 سال پیش
ایده خوبی هست.امیدوارم موفق باشی.ولی یه جوری درستش کن که 4 روز بعد که حرفه ای تر شدی وقتی کسی ازت نمونه کار خواست و تو خواستی این برنامه رو معرفی کنی خجالت نکشی.یعنی یه برنامه ای بساز (یا همین برنامه رو جوری بساز) که پس فردا با افتخار به همه معرفیش کنی و بگی "ای ملت، این برنامه مال منه".یعنی هروقت اسمت میاد همه با عنوان یه برنامه نویس خوب و به نیکی ازت یاد کنن.پس یا همین برنامه رو به بهترین نحو ممکن درست کن یا روی یک ایده نو و بکر فکر کن
Hossein Kurd 11 سال پیش
بی دقت ، عجول و تنبل ؛ من هم مدتی کد آماده می گرفتم تنبل شده بودم فقط کپی پیست می کردم اما الان نه
Ghost 11 سال پیش
@ مهدی خسروی : اما من نظرم چیز دیگه ای هست ! برنامه نویس اگه انیشتین هم باشه باید به عنوان اولین برنامه یه چیز خیلی سبک و کوچولو بسازه ! این بود عقیده من
Hossein Kurd 11 سال پیش
گاست درست می گه ، سنگ بزرگ نشانه نزدنه
دوست خوبم بهتره در نامگذاری اکتیویتی به جای ActivityBeshmar از کلمه ActivityCount استفاده کنی. یاد درس کدکانونشن استاد افتادم.
از همین الان که شروع کردی یاد بگیر که نامگذاری هات اصولی و استاندارد باشه تا به حالت استاندارد عادت کنی. اگه از الان به فینگلیش عادت کنی تا آخر روی همین عادت میمونی و اگه واقعا قصد جدی برای ادامه دادن به برنامه نویسی داری فردا که ایشالا وارد کارهای تیمی شدی با بقیه برنامه نویس های استاندارد به مشکل برمیخوری.
Ghost 11 سال پیش

دوستان سلام ! یه سوال کوچولوی دیگه دارم گفتم همین جا بپرسم دیگه :

من یک فیلدی دارم به اسم Conter و 4 تا گزینه ! وقتی کاربر روی گزینه اول کلیک کرد Conter باید با عدد 1 جمع بشه و بره توی Activity بعدی !

و اگه کاربر روی گزینه دوم کلیک کرد Conter باید با عدد 2 جمع بشه و بره توی Activity بعدی !

و اگه کاربر روی گزینه سوم کلیک کرد Conter باید با عدد 3 جمع بشه و بره توی Activity بعدی !

و اگه کاربر روی گزینه چهار کلیک کرد Conter باید با عدد 4 جمع بشه و بره توی Activity بعدی !

و حالا به فرض کاربر روی گزینه اول کلیک کرده و 1 ریخه شده توی  Conter و یوزر به Activity بعدی رفت :

اگه یوزر تصمیم گرفت برگرده و گزینه رو تصحیح کنه و گزینه دوم رو انتخاب کنه 1 با 2 جمع میشه و میشه 3 ! خب این غلطه !

چیکار کنم الان که دیگه 1 با دو جمع نشه ؟

نظرات

Hossein Kurd 11 سال پیش
خب شما counter رو ثابت نگه دار و تغییرش نده ؛ یک متغیر داشته باش و اون رو اینطور مقدارده کن تا در واقع همیشه مقدار counter از دیتابیس یا هرجایی که خودت می دونی برداشته بشه و تغییر نکنه int sum = counter + value; لینک end

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