无法从不同的类GPS_service访问mainactivity类的字符串变量的值

时间:2013-12-15 09:28:24

标签: android

无法从其他类GPS_service

访问mainactivity类中声明的字符串变量的值

我为m.strtime获取空值.....为什么这是

以下是我的主要活动类

主要活动类别

package com.example.test;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;

public class MainActivity extends Activity {


    ImageView done;
    GPSTracker gps; 
    long time;
    String strtime;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);     
        setContentView(R.layout.activity_main);

        done=(ImageView)findViewById(R.id.done);

        done.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                time = System.currentTimeMillis();
                strtime = Long.toString(time);  

                        Intent intent = new Intent(MainActivity.this, GPS_service.class);                  


                        PendingIntent pintent = PendingIntent.getService(MainActivity.this, 0, intent, 0); 


                        AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);       


                    alarm.setRepeating(AlarmManager.RTC_WAKEUP, time,30000, pintent); 

            }           

        });
    }
}

以下是我的gps服务类

GPS服务类

package com.example.test;

import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.IBinder;
import android.widget.Toast;

public class GPS_service extends Service {

    GPSTracker gps;
    MainActivity m;


    @Override
        public IBinder onBind(Intent intent) {

        // TODO: Return the communication channel to the service.
            throw new UnsupportedOperationException("Not yet implemented");
        }


        @Override
        public void onCreate() { 

            super.onCreate(); 
            Toast.makeText(getApplicationContext(), "Service Created", 1).show();
        }


     @Override
    public void onDestroy() {

             super.onDestroy();
            Toast.makeText(getApplicationContext(), "Service Destroy", 1).show();
        }


        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {

            Toast.makeText(getApplicationContext(), "Service Running ", 1).show();

            m=new MainActivity();       
            gps=new GPSTracker(GPS_service.this);   

            if(gps.canGetLocation())
        {               
                String message="I am in "+gps.finallocation+"\n\nLocation Link :"+gps.GPSLink+ "\n\nTime   

                            :" +m.strtime;
            Toast.makeText(context,message,Toast.LENGTH_LONG).show();                   


        }
        else
        {
            gps.showSettingsAlert();
        }

            return super.onStartCommand(intent, flags, startId);

        }

}

1 个答案:

答案 0 :(得分:0)

您不应该实例化活动

就像你在这里做的那样

  m=new MainActivity();   

为什么你有空?

它简单的Oops概念,您正在创建该MainActivity的新对象,因此所有值都将被初始化;

而不是这样做我想建议将值放在数据库上或使用 SharedPreference 并在服务或活动中访问这些值