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

انقال اطلاعات بین activity ها

114318  10 سال پیش  10 سال پیش
0 0

سلام...دوستان لطفا کمک کنید

من طبق آموزش ارتباط بین اکتیویتی ها پیش رفتن ولی با اون قسمتی ک استاد میگن با استفاده از دوتا if(extras.containsKey) حتی اگر کاربر فیلد رو خالی بذاره برنامه کرش نمیکنه مشکل دارم..برنامه ی من کرش میکنه...بعدش وقتی اون قسمت کد رو کامنت میکنم برنامه دیگه کرش نمیکنه..اینو باید چیکارش کرد؟

اینم چیزیه که تو logcat میزنه...

08-18 11:09:43.637: E/AndroidRuntime(2996): FATAL EXCEPTION: main
08-18 11:09:43.637: E/AndroidRuntime(2996): java.lang.NumberFormatException: Invalid int: ""
08-18 11:09:43.637: E/AndroidRuntime(2996):     at java.lang.Integer.invalidInt(Integer.java:138)
08-18 11:09:43.637: E/AndroidRuntime(2996):     at java.lang.Integer.parseInt(Integer.java:359)
08-18 11:09:43.637: E/AndroidRuntime(2996):     at java.lang.Integer.parseInt(Integer.java:332)
08-18 11:09:43.637: E/AndroidRuntime(2996):     at activities.FirstActivity$1.onClick(FirstActivity.java:29)
08-18 11:09:43.637: E/AndroidRuntime(2996):     at android.view.View.performClick(View.java:4204)
08-18 11:09:43.637: E/AndroidRuntime(2996):     at android.view.View$PerformClick.run(View.java:17355)
08-18 11:09:43.637: E/AndroidRuntime(2996):     at android.os.Handler.handleCallback(Handler.java:725)
08-18 11:09:43.637: E/AndroidRuntime(2996):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-18 11:09:43.637: E/AndroidRuntime(2996):     at android.os.Looper.loop(Looper.java:137)
08-18 11:09:43.637: E/AndroidRuntime(2996):     at android.app.ActivityThread.main(ActivityThread.java:5041)
08-18 11:09:43.637: E/AndroidRuntime(2996):     at java.lang.reflect.Method.invokeNative(Native Method)
08-18 11:09:43.637: E/AndroidRuntime(2996):     at java.lang.reflect.Method.invoke(Method.java:511)
08-18 11:09:43.637: E/AndroidRuntime(2996):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
08-18 11:09:43.637: E/AndroidRuntime(2996):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
08-18 11:09:43.637: E/AndroidRuntime(2996):     at dalvik.system.NativeStart.main(Native Method)

0 0
البته من برنامه ی خود استادم اجرا کردم کرش شد و همین مشکل رو داشت (10 سال پیش)
+2 0
خطا رو بررسی کنید و ببنید چه اروری میده بهتون ، قسمتی از ارور که مربوط هست رو در سوال درج کنید . (10 سال پیش)
+1 0
عرض کردم بخشی از خطا ها رو در سوال درج کنید . بخش نظرات جای درج خطا نیست . (10 سال پیش)
+1 0
داره میگه شما مقدار "" رو دارید به int کست میکنید و این امکان وجود نداره ، احتمالا توی کدتون موقع ارسال یا دریافت اشکالی وجود داره و داده ای ارسال نمیشه . (10 سال پیش)
0 0
منم مشکلم همینه..اگه سوالمو خونده باشید نوشتم که استاد تو آموزش میگن که با دو تا if نوشتن حتی اگه کاربر فیلد ها رو خالی بزاره باز برنامه کرش نمیکنه ولی اینجا کرش میکنه..بعدشم من حتی وقتی کد خود استاد رو هم اجرا کردم بازم کرش کرد..من دارم در مورد آموزش 1-5 صحبت مبکنم (10 سال پیش)
+1 0
متوجه منظور شما شدم برای رفع مشکل کد مربوط به گرفتن و خوندن داده ها از intent ;که نوشتید رو در پایین همین صفحه به صورت پاسخ بنویسید تا مشکل رو بررسی کنیم. (10 سال پیش)
 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
114318  10 سال پیش
0 0

گرفتن داده ها:

String userInput = edtUserInput.getText().toString();
                int userAge = Integer.parseInt(edtUserAge.getText().toString());

                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                intent.putExtra("USER_INPUT", userInput);
                intent.putExtra("USER_AGE", userAge);
                FirstActivity.this.startActivity(intent);
                FirstActivity.this.finish();

خواندن داده ها:

 Bundle extras = getIntent().getExtras();
        if (extras != null) {
            String userInput = "";
            int userAge = 0;

            if (extras.containsKey("USER_INPUT")) {
                userInput = extras.getString("USER_INPUT");
            }

            if (extras.containsKey("USER_AGE")) {
                userAge = extras.getInt("USER_AGE");
            }

            Log.i("LOG", "UserInput: " + userInput + ", UserAge: " + userAge);
            txtCaption.setText(userInput + " " + userAge + " YO");
        }

+1 0
خب دوست عزیز شما دارید مقدار رو از یک EditText میگیری و اگر EditText خالی باشه به معنی null بودن نیست و null با این "" فرق داره شما باید در جایی که داده هارو کاربر میخواد بفرسته یک شرط بذاری و چک کنی که مقدار editTet برابر با "" نباشه . (10 سال پیش)
0 0
ارور شما هم مربوط به جایی هست که دارید مقدار EditText رو به int پارس میکنید و چون خالی هست این مشکل به وجود میاد . (10 سال پیش)
پاسخ به سوال 
Morteza  10 سال پیش
+1 0

با سلام ،خطای برنامه مربوط به خط 2 قسمت گرفتن داده هنگام پارس کردن می باشد ، راحت ترین راه استفاده از یک بلاک try catch می باشد :

        try {
int userAge = Integer.parseInt(edtUserAge.getText().toString());
}
catch (NumberFormatException e) {
e.printStackTrace();
}


البته محمدحسین پاسخ داد ،من یه کوچولو کاملش کردم:)

0 0
استفاده از این تو اصل موضوع تغییری ایجاد نمیکنه که..فقط از کرش کردن جلو گیری میکنه..مشکل من با اونجاییه که استاد میگه اگر از if (extras.containsKey("USER_INPUT")) استفاده کنی دیگه مشکلی پیش نمیاد..میخام ببینم آیا گفته ی استاد غلطه یا جایی رو ناقص گفته یا من جایی مشکل دارم..چون من خود برنامه ی استاد رو هم با این شرایط اجرا کردم کرش کرد... (10 سال پیش)
پاسخ به سوال 
114318  10 سال پیش
0 0

من این کارو کردم ولی بازم برنامه کرش کرد :(

 String userInput = edtUserInput.getText().toString();
                String userage = edtUserAge.getText().toString();
                if (userage != "") {
                    int userAge = Integer.parseInt(userage);
                    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                    intent.putExtra("USER_INPUT", userInput);
                    intent.putExtra("USER_AGE", userAge);
                    FirstActivity.this.startActivity(intent);
                    FirstActivity.this.finish();

پاسخ به سوال 
Morteza  10 سال پیش
+2 0

تکه کد زیر هنگامی از خطای برنامه جلوگیری میکنه که شما هنگام جابجایی بین دوتا اکتیویتی اطلاعاتی با کلید USER_INPUT ارسال نکنی :

 if (extras.containsKey("USER_INPUT")){

}

اما خطای برنامه شما مربوط به این بود که شما میخواستی عبارت > "" < یعنی هیچی را ، به یک عدد تبدیل کنی که خوب نمیشه و برنامه خظا میده که همانطور که در پست بالا گفتم اصولی ترین راه استفاده از بلاک try هست.

اما ارور تکه کد بالای شما به خاطر این هست که برای مقایسه رشته باید از تابع equals استفاده کنید :

if ( !userage.equals("")) {
int userAge = Integer.parseInt(userage);
}
0 0
مرسی از راهنماییت دوست عزیز ;) (10 سال پیش)
0 0
خواهش میکنم اما لطفا به جای نظرات اسپم از علامت لایک بالای پست استفاده کن. (10 سال پیش)

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