انقال اطلاعات بین activity ها
سلام...دوستان لطفا کمک کنید
من طبق آموزش ارتباط بین اکتیویتی ها پیش رفتن ولی با اون قسمتی ک استاد میگن با استفاده از دوتا 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)
گرفتن داده ها:
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");
}
با سلام ،خطای برنامه مربوط به خط 2 قسمت گرفتن داده هنگام پارس کردن می باشد ، راحت ترین راه استفاده از یک بلاک try catch می باشد :
try {
int userAge = Integer.parseInt(edtUserAge.getText().toString());
}
catch (NumberFormatException e) {
e.printStackTrace();
}
البته محمدحسین پاسخ داد ،من یه کوچولو کاملش کردم:)
من این کارو کردم ولی بازم برنامه کرش کرد :(
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();
تکه کد زیر هنگامی از خطای برنامه جلوگیری میکنه که شما هنگام جابجایی بین دوتا اکتیویتی اطلاعاتی با کلید USER_INPUT ارسال نکنی :
if (extras.containsKey("USER_INPUT")){
}
اما خطای برنامه شما مربوط به این بود که شما میخواستی عبارت > "" < یعنی هیچی را ، به یک عدد تبدیل کنی که خوب نمیشه و برنامه خظا میده که همانطور که در پست بالا گفتم اصولی ترین راه استفاده از بلاک try هست.
اما ارور تکه کد بالای شما به خاطر این هست که برای مقایسه رشته باید از تابع equals استفاده کنید :
if ( !userage.equals("")) {
int userAge = Integer.parseInt(userage);
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .