Android 从不同的类文件启动AsyncTask(通过onReceive)

Android 从不同的类文件启动AsyncTask(通过onReceive),android,service,android-asynctask,Android,Service,Android Asynctask,不管我怎么寻找,都无法克服 我有AlarmManager,我想在每X秒后启动AsyncTask 我确实有另一个文件,class(Alarm.class),在那里我有onReceive。无论我在里面放什么,都会被完美激活 现在我有问题了。我的主线程/类(Onime)中有异步任务what。它完成许多任务,包括下载一些内容 现在的问题是,如何从另一个类启动该异步任务。遗憾的是,静态不起作用,因为asyc包含了一些不允许静态的东西。可以通过某种服务吗 public class Alarm extends

不管我怎么寻找,都无法克服

我有AlarmManager,我想在每X秒后启动AsyncTask

我确实有另一个文件,class(Alarm.class),在那里我有onReceive。无论我在里面放什么,都会被完美激活

现在我有问题了。我的主线程/类(Onime)中有异步任务what。它完成许多任务,包括下载一些内容

现在的问题是,如何从另一个类启动该异步任务。遗憾的是,静态不起作用,因为asyc包含了一些不允许静态的东西。可以通过某种服务吗

public class Alarm extends BroadcastReceiver 
{    
     @Override
     public void onReceive(Context context, Intent intent) 
     {   
         // Put here YOUR code.
         Log.d("alarminfo", "Alarm works!"); 


     }

 public void SetAlarm(Context context)
 {
     AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
     Intent i = new Intent(context, Alarm.class);
     PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
     Calendar time = Calendar.getInstance();
     time.setTimeInMillis(System.currentTimeMillis());
     time.add(Calendar.SECOND, 30);
     am.setRepeating(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), 1000*60*1, pi); // Millisec * Second * Minute
     Log.d("alarminfo", "Set alarm!"); 
 }

 public void CancelAlarm(Context context)
 {
     Log.d("alarminfo", "End alarm!"); 
     Intent intent = new Intent(context, Alarm.class);
     PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
     AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
     alarmManager.cancel(sender);
 }
}
那是警报课

以下是异步(在Onime.class(不同的文件)中):

class animeUpdator扩展了异步任务{
类连接实现可运行{
公开作废运行(){
试一试{
URL=新URL(“http://xxx.com");
URLConnection URLConnection=url.openConnection();
BufferedReader BufferedReader=
新的BufferedReader(新的InputStreamReader(urlConnection.getInputStream());
弦线;
计数=1;
动画列表。清除();
而((line=bufferedReader.readLine())!=null){
帕辛甘尼姆(线);
计数+=1;
}
bufferedReader.close();
MessageToMainThread(更新主界面);
}捕获(例外e){
Log.d(“readInfo”,例如toString());
}
}
}    

如果需要创建内部类的实例,可以从外部类开始:

Onime.animeUpdator.class.getConstructors()[0].newInstance(new Onime());
注意,Java类名应该以capital.ex.animeUpdater开头

更多信息,请参见此和。
或者正如评论所指出的:

public class animeUpdator extends AsyncTask<ArrayList<Anime>, Integer, String> {
   public animeUpdator(){
          ...
   }
public类animeUpdater扩展异步任务{
公众动物导览员(){
...
}

}

问题是…animeUpdator在“Onime”类中,与此不同的是文件:/…(mainActivity)@new update:无法访问Onime类型的封闭实例。必须使用Onime类型的封闭实例(例如x.new A()其中x是Onime的实例。-这也是我以前遇到的问题。至少它没有显示编码错误,但引发了我异常:12-17 03:18:18.829:E/AndroidRuntime(647):java.lang.RuntimeException:无法启动receiver xx.xx.xx.Alarm:java.lang.ArrayIndexOutOfBoundsException:长度=0;索引=0-我认为它可能已经在AsyncTask中出现问题?请尝试添加一个构造函数。在我编辑时。从另一个类创建AsyncTask的实例并不是一个好主意。谢谢,它可以工作:).我确实明白了,但我想这次的原因可能真的是另外一件事。无论如何,我会亲自调查的。谢谢!
public class animeUpdator extends AsyncTask<ArrayList<Anime>, Integer, String> {
   public animeUpdator(){
          ...
   }