지금부터 몇 시간 씩 고생하고 있습니다. 내 글로벌 변수가 내 서비스에서 작동하는 것으로 보이지만 내 액티비티에서 해당 변수에 액세스하려고하면 아무런 결과도 얻지 못합니다.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를"초기 어디 서비스가 빈 다음, 첫 공개 활동하지만 목록을 시작 정말 활동에