0

지금부터 몇 시간 씩 고생하고 있습니다. 내 글로벌 변수가 내 서비스에서 작동하는 것으로 보이지만 내 액티비티에서 해당 변수에 액세스하려고하면 아무런 결과도 얻지 못합니다.Android 글로벌 변수가 서비스와 액티비티간에 작동하지 않습니다.

글로벌 VAR 클래스 :

public class GlobalShare extends Application{ 
    public static GlobalShare singleton; 
    public List<LocationUsageDB> processed = new ArrayList<LocationUsageDB>(); 


    public static GlobalShare getInstance(){ 
     return singleton; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     singleton = this; 
    } 
} 

관련 서비스 코드 :

public int onStartCommand(Intent intent, int flags, int startId) { 
    if(gpschanged){ 
       Time t = new Time(Time.getCurrentTimezone()); 
       t.setToNow(); 
       String date = t.format("%Y/%m/%d"); 
       mydb.insertRecord(new LocationUsageDB(foregroundTaskAppName, date, t.hour+":"+t.minute+":"+t.second, "true", "false", Double.toString(worker.getLastKnownLocationNetwork(getBaseContext()).getLatitude()), Double.toString(worker.getLastKnownLocationNetwork(getBaseContext()).getLongitude()), worker.getLastKnownLocationNetwork(getBaseContext()).getAccuracy())); 
       List<LocationUsageDB> contacts = mydb.getAllRecords(); 
       Log.v("process method called", contacts.size()+""); 
       Process(contacts); 


    } 
    public void Process(List<LocationUsageDB> contacts){ 
      boolean first = false; 
      GlobalShare gv = (GlobalShare) getApplicationContext(); 

      for (LocationUsageDB cn : contacts) { 
       // String log = "Id: "+cn.id+" ,Name: " + cn.AppName + " ,Date: " + cn.Date+ " ,Time: " + cn.Time+ " ,Gps: " + cn.Gps+ " ,Network: " + cn.Network + ",latitude:" + cn.Latitude + ", lonitude:" + cn.Longitude + ", accuracy:" + cn.Accuracy; 
       //String name, String date(freq), String time(nothing, String gps(freq), String network(freq), float accuracy(avg) 

       if(first){ 
        Log.d("processsing contacts", cn.AppName); 
        if(cn.Gps == "true"){ 
         gv.processed.add(new LocationUsageDB(cn.AppName, "1", "", "1", "0", cn.Accuracy)); 
        } 
        else{ 
         gv.processed.add(new LocationUsageDB(cn.AppName, "1", "", "0", "1", cn.Accuracy)); 
        } 
        Log.d("first", "add"); 
        first = true; 
       } 
       else{ 
        Log.d("processsing contacts", cn.AppName); 
        for (LocationUsageDB p : gv.processed) { 
         if(cn.AppName == p.AppName){ 
          gv.processed.add(new LocationUsageDB(cn.AppName, "1", "", "0", "1", cn.Accuracy)); //change still, but dummy data to try get it working 
         } 
         else{ 
          if(cn.Gps == "true"){ 
           gv.processed.add(new LocationUsageDB(cn.AppName, "1", "", "1", "0", cn.Accuracy)); 
          } 
          else{ 
           gv.processed.add(new LocationUsageDB(cn.AppName, "1", "", "0", "1", cn.Accuracy)); 
          } 
         } 
        } 
       } 
      } 

로그 결과는 모든 것이 올바르게 작동하고 데이터가

은 "문제"내가 생각, 활동

을 추가 보여 :

public class Statistics extends Activity { 
    Timer timer= new Timer(); 
    DataHandler mydb; 
    ListView listview; 
    StatisticsAdapter adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_statistics); 

     listview = (ListView) findViewById(R.id.listViewStatistics); 
     GlobalShare gv = (GlobalShare) getApplicationContext(); 

     adapter = new StatisticsAdapter(getApplicationContext(), R.layout.customstatistics_layout, gv.processed); 

     adapter.notifyDataSetChanged(); 
     listview.setAdapter(adapter); 
    } 
내가 매니페스트 Log.v

사용 된 경우

이 gv.processed의 크기는 ... 0 :

<application 
     android:name="com.example.tracksme.GlobalShare" 
     android:allowBackup="true" 
..... 

은 내가하지 않아도 예를 들면 원인

android:process=":MyService" 

다른 사람들을위한 문제.

도와주세요! 당신이 당신의 "GV를"초기 어디 서비스가 빈 다음, 첫 공개 활동하지만 목록을 시작 정말 활동에

답변

1

을이 시도?

먼저, android:process=":MyService"을 제거하여 다른 프로세스에 서비스를 시작하지 않는, 조심스럽게 다시 확인, GlobalShare gv = (GlobalShare) getApplicationContext(); 둘째

GlobalShare gv = GlobalShare.getInstance();에 의해 (서비스 및 활동 모두에서) 모든 대체하려고합니다. 일반적인 이유는 프로세스에 관한 것입니다.

0

붙어, ... 대신 당신은 의미

gv = GlogalShare.getInstance(); 
관련 문제