2012-07-08 46 views
5

Tôi lúng túng vì sao tôi không thể truy cập các biến toàn cầu từ dịch vụ của mình. Tôi có thể truy cập chúng từ các hoạt động khác tốt ....Biến toàn cục của Android không hoạt động trong Dịch vụ

toàn cầu var lớp:

public class Global extends Application { 
private static final String TAG = "Global Class"; 

int test;  

public int getTest() 
{ 
    return test; 
} 

Hoạt động chính tôi sử dụng mã kiểm tra này:

Global appState = ((Global)getApplication()); //Context()); 
appState.setTest(555); 
Log.e("SETTEST",new Integer(appState.getTest()).toString()); 

Kết quả là 555

Một hoạt động khác tôi sử dụng cùng một mã:

Global appState = ((Global)getApplication()); //Context()); 
Log.e("SETTEST",new Integer(appState.getTest()).toString()); 

Kết quả là 555

cuối cùng phục vụ của tôi, tôi sử dụng mã tương tự như trên:

Global appState = ((Global)getApplication()); //Context()); 
Log.e("SETTEST",new Integer(appState.getTest()).toString()); 

và tôi nhận được lớn, chất béo 0 trở lại.

Vui lòng trợ giúp. Tôi đã dành 3 giờ cho đến nay. Tôi đã cố gắng sử dụng getApplication, và getApplicationContext

Ngoài ra, vẻ ngoài biểu hiện như thế này:

... 
<application android:icon="@drawable/signal" android:label="@string/app_ name" android:name="<absolute path>.util.Global"> 


<service 
    android:name=".util.MyService" 
    android:process=":MyService" 
    android:icon="@drawable/airplane" 
    android:label="@string/service_name" 
    > 
</service> 

** Tôi chỉ cố gắng sử dụng một lớp singleton cũng theo bài này. cùng khó khăn như trên:

Android - Global variables?

+0

Cố gắng chuyển chúng bằng cách sử dụng Tùy chọn được chia sẻ..Tôi hy vọng nó sẽ hoạt động. –

+0

Dịch vụ của bạn có chạy cục bộ hoặc từ xa không? Đăng tệp kê khai cho dịch vụ của bạn –

+0

đây chỉ là mã thử nghiệm đơn giản. Tôi đang đi qua một mảng lớn các đối tượng tùy chỉnh ... Tôi không chắc chắn nếu được chia sẻ prefs là cách để đi đúng tôi nếu tôi sai –

Trả lời

16

dịch vụ của bạn đang chạy từ xa bởi vì bạn đã có này:

android:process=":MyService" 

trong định nghĩa manifest cho dịch vụ.

Điều này có nghĩa là nó đang chạy một quy trình hoàn toàn riêng biệt. Bạn không thể chia sẻ các biến toàn cầu bằng cách sử dụng các biến tĩnh theo cách đó.

Nếu bạn không cần dịch vụ của mình để chạy trong một quy trình riêng biệt, thì chỉ cần xóa dòng "android: process" và bạn sẽ ổn.

+0

yup! đã hoạt động. –

+0

Cảm ơn bạn rất nhiều! –

+0

họ nên cảnh báo mọi người, hoặc tôi đã bỏ lỡ sth. – guness

Các vấn đề liên quan