android.content.Context.getPackageName()' 在空对象引用上

android.content.Context.getPackageName()' on a null object reference

我正在尝试从另一个服务 class 调用服务 class 但我收到此错误:

android.content.Context.getPackageName() on a null object reference

你知道我如何从另一个服务调用服务吗?

当我首先将我的应用程序设置为 phone 时,广播接收器正在启动警报 class 并且在警报 class 中,我想在 ReadGmail() 方法中启动另一个服务。但是我得到了空对象引用错误。

这是我的代码:

public class Alarm extends Service {
private String userName;
private String password;
private String receivingHost;
Context context;

public int onStartCommand(Intent intent, int flags, int startId) {
    final Handler handler = new Handler();
    TimerTask doAsynchronousTask = new TimerTask() {
        @Override
        public void run() {
        handler.post(new Runnable() {
                public void run() {
                    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                    StrictMode.setThreadPolicy(policy);
                     String senderPassword=new String("password");
                        String senderUserName=new String("username@gmail.com");
                        Alarm newGmailClient=new Alarm();
                        newGmailClient.setAccountDetails(senderUserName, senderPassword);
                        newGmailClient.readGmail();
                }
            });
        }
    };
    Timer timer = new Timer();
    timer.schedule(doAsynchronousTask, 10, 120000);

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


  };



public void setAccountDetails(String userName,String password){  
    this.userName=userName;//sender's email can also use as User Name
    this.password=password;
}


public void readGmail(){
    this.receivingHost="imap.gmail.com";//for imap protocol
    Properties props2=System.getProperties();
    props2.setProperty("mail.store.protocol", "imaps");
    Session session2=Session.getInstance(props2, null);
        try {
                Store store=session2.getStore("imaps");
                store.connect(this.receivingHost,this.userName, this.password);
                Folder folder=store.getFolder("INBOX");//get inbox
                folder.open(Folder.READ_ONLY);//open folder only to read
                Message message[]=folder.getMessages();
                String key= "Hey";
                String subject;
                for(int i=0;i<message.length;i++){
                    System.out.println(message[i].getSubject());
                    subject=message[i].getSubject();

                 if(subject.equals(key)){
                     System.out.println("inside");
Intent mTutorial = new Intent(Alarm.this, LaunchActivity.class); 

this.startService(mTutorial); 

//I want to call service class in here. LaunchActivity is my service class.



                 }
                    //Log.d(message[i].getSubject(),message[i].getSubject());
                }
                folder.close(true);
                store.close();
        } catch (Exception e) {
               System.out.println(e.toString());
        }
}

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


    // TODO Auto-generated method stub
    super.onDestroy();
    Log.d("", "FirstService destroyed");
}


}

使用您的服务将用来传达事件的接口:

public 接口 ServiceCallbacks { 无效做某事(); }

这是你的问题:

Alarm newGmailClient=new Alarm();

您的 Alarm class 扩展 Service。这是一个 Android Service。您不能使用 new 创建 Android 组件的实例。只有 Android 可以创建 Android 个组件。如果你想开始一个Service,你调用startService

为什么要开始另一个 Service?请解释。