2011-03-09 28 views
6

Tôi đã tạo một dịch vụ được gọi từ hoạt động chính và chuyển cho nó một biến đơn giản để truy cập và chuyển sang màn hình từ bên trong dịch vụ. Tôi không thể tìm thấy mã đúng để truy cập biến từ bên trong dịch vụ. Mọi sự trợ giúp sẽ rất được trân trọng. Cảm ơn.Android: Truy cập Biến được chuyển đến dịch vụ

Hoạt động chính cách gọi dịch vụ từ bên trong một người biết lắng nghe nút bấm:

@Override 
public void onClick(View v) { 

    Intent eSendIntent = new Intent(getApplicationContext(), eSendService.class); 

    eSendIntent.putExtra("extraData", "somedata"); 

    startService(eSendIntent); 

} 

eSendService mã lớp dịch vụ:

public class eSendService extends Service { 


    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 

      // This is the code that I am struggling with. Not sure how to access the 
      // variable that was set in the intent. Please advise. 
      // The below code gives the following error in eclipse: 
      //  The method getIntent() is undefined for the type eSendService 
      Bundle extras = getIntent().getExtras(); 

    } 

} 

Một lần nữa, cảm ơn vì bất kỳ và tất cả sự giúp đỡ. Tôi dường như không thể tìm thấy một ví dụ đơn giản ngoài kia cho thấy tôi làm thế nào để làm điều này. Cảm ơn.

Trả lời

3

Mã ban đầu của bạn là gì? Bạn đã cố gắng lấy dữ liệu trước khi gọi super.onCreate(), đó có thể là vấn đề.

Tôi nghĩ rằng bạn muốn:

@Override 
public void onCreate() { 
    super.onCreate(); 

    Bundle extras = getIntent().getExtras(); 
    string extraData = extras.getString("extraData"); 

} 
+0

Hi E Z Hart. Tôi đã thử nó sau phương thức super.onCreate() cũng không thay đổi. Eclipse là gạch chân "getIntent()" và khi tôi di chuột qua nó, tôi nhận được lỗi này "Phương thức getIntent() là không xác định cho kiểu eSendService". Cảm ơn bạn đã giúp đỡ. – RayJamesFun

11

Ok, tìm thấy câu trả lời của riêng tôi cuối cùng và muốn chia sẻ nó để giúp bất cứ ai khác.

Câu trả lời: onStart() hoặc onStartCommand() (tùy thuộc vào mục tiêu api) là ý định được truyền đến và gọi sau startService() được gọi bởi hoạt động. Tôi nghĩ ý định này đã được chuyển cho phương thức onCreate() nhưng nó thực sự được truyền cho lệnh bắt đầu cho các dịch vụ.

@Override public void onStart(Intent intent, int startId) { 
    // TODO Auto-generated method stub 
    super.onStart(intent, startId); 
    String extras; extras = intent.getExtras().getString("extraData"); 
    Toast.makeText(this, extras, Toast.LENGTH_LONG).show(); 
} 
Các vấn đề liên quan