2010-01-26 54 views
15

Tôi đang cố chuyển một số nguyên giữa các hoạt động sử dụng mục đích. Hoạt động nguồn thực hiện cuộc gọi info.id là mục được chọn từ một ListView.getIntExtra luôn trả về giá trị mặc định

Intent intent = new Intent(myActivity.this, newClass.class); 
intent.putExtra("selectedItem", info.id); 
this.startActivity(intent); 

Hoạt động mục tiêu lấy mục đích sử dụng getIntent sau đó gọi

int iSelectedItem = intent.getIntExtra("selectedItem", -1); 

iSelectedItem luôn là -1 thay vì giá trị truyền cho putExtra. Ai đó có thể cho tôi biết những gì tôi đang làm sai hoặc tôi có hiểu nhầm việc sử dụng các mục đích sử dụng của không?

Trả lời

18

Vấn đề là info.id sẽ là 'dài' và không chuyển thành 'int'. Hãy thử

long iSelectedItem = intent.getLongExtra("selectedItem", -1) 
+0

Có điều này làm việc tốt cho tôi. – EtienneSky

12

Tôi không tìm thấy phương pháp putIntExtra(). Vì vậy, tôi đã kết thúc với sau:

intent.putExtra("jobId", 1); 

Integer.parseInt(getIntent().getExtras().get("jobId").ToString()); 

Dùng thử và bắt để xử lý ngoại lệ.

CẬP NHẬT

Sau đó tôi phát hiện ra rằng tôi đã đi qua jobId dưới dạng chuỗi trong putExtra() phương pháp, do đó getIntExtra() luôn trở về giá trị mặc định.

Vì vậy, @Grant là chính xác. Bạn phải chuyển giá trị Số nguyên trong phương thức putExtra() để sử dụng phương pháp getIntExtra().

+0

woohoo .. kudo. – Sayka

1

Tôi gặp sự cố này và đó là một điều đơn giản.

Kiểm tra xem bạn có đang sử dụng onActivityResult ... không, bạn không có để sử dụng getIntent() để nhận các tính năng bổ sung, bạn phải sử dụng mục đích bạn chuyển làm tham số.

Trong trường hợp của bạn nên được một cái gì đó như thế này:

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (resultCode == RESULT_OK) { 
     int iSelectedItem = intent.getIntExtra("selectedItem", -1);    
     Log.d("DEBUG", "check iSelectedItem = " + iSelectedItem); 
    } 
} 

nhận xét rằng tôi không sử dụng getIntent(), nhưng mục đích tranh luận.

(PS: nếu bạn đang gọi điện thoại rất nhiều hoạt động mong đợi kết quả, là tốt hơn để kiểm tra xem mục đích là = null)

Tôi hy vọng nó giúp.

1

dễ dàng:

Bundle bundle = getIntent().getExtras(); 
int iSelectedItem = bundle.getInt("selectedItem", -1); 

Bây giờ, nếu bạn đang sử dụng StartActivityForResult và bạn muốn quay trở lại một số dữ liệu, từ các hoạt động trẻ em, nhắc nhở rằng bạn phải sử dụng onActivityResult

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
if (resultCode == RESULT_OK) { 
    int iSelectedItem = intent.getExtras.getInt("selectedItem", -1);    
    Log.d("DEBUG", "check iSelectedItem = " + iSelectedItem); 
    } 
} 

Hãy nhớ rằng, cũng giống như cách bạn nhận được phần bổ sung từ Hoạt động khác, chỉ cần sử dụng gói.getInt, trong ví dụ này, getExtras trả về một bó, vì vậy, trong bó này, bạn có thể nhận được bất kỳ dữ liệu nào mà bạn đã gửi từ resultIntent.

0

Trong trường hợp của tôi, đó là vì tôi đã tạo một đối tượng với biến thành viên trung khai báo là chuỗi

public class Application { 

private String mId; 
.... 
} 

intent.putExtra("id", myApplication.getId()); 

và như vậy, the Extra được thông qua như là chuỗi. chỉ cần thay đổi biến thành viên của bạn thành int, bạn có được ý tưởng;)

0
int sub_menu_id = 0; 
    int question_part = 0; 

    if (savedInstanceState == null) { 
     Bundle extras = getIntent().getExtras(); 
     if (extras == null) { 
      sub_menu_id = -1; 
      question_part = -1; 
     } else { 
      sub_menu_id = extras.getInt("sub_menu_id"); 
      question_part = extras.getInt("question_part"); 
     } 
    } 

    Log.d("DREG", "sub_menu_id: " + sub_menu_id + "\nquestion_part: " + question_part); 
Các vấn đề liên quan