【问题标题】:Running ASyncTask doInBackground() From Inside A Service从服务内部运行 ASyncTask doInBackground()
【发布时间】:2014-01-16 22:50:18
【问题描述】:

我有一个调用 LocationHelper 来获取用户位置的服务

LocationWorker locationTask = new LocationWorker();
locationTask .execute(new Boolean[] {true});

    class LocationWorker extends AsyncTask<Boolean, Integer, Boolean> {
        @Override
        protected void onPreExecute() {}    

        @Override
        protected void onPostExecute(Boolean result) {
            /* Here you can call myLocationHelper.getLat() and myLocationHelper.getLong() to get the location data.*/
            latitude= = myLocationHelper.getLat();
            longitude= = myLocationHelper.getLong();
=       }

        @Override
        protected Boolean doInBackground(Boolean... params) {
            //while the location helper has not got a lock
            while(myLocationHelper.gotLocation() == false){
                //do nothing, just wait
            }
            //once done return true
            return true;
        }
    }

这在 Activity 中运行良好,但我试图从 A Service 中运行它

*我收到此错误并崩溃 *

01-16 22:31:57.854: W/dalvikvm(23413): threadid=11: thread exiting with uncaught exception (group=0x41f42700)
01-16 22:31:57.869: E/AndroidRuntime(23413): FATAL EXCEPTION: AsyncTask #1
01-16 22:31:57.869: E/AndroidRuntime(23413): java.lang.RuntimeException: An error occured while executing doInBackground()
01-16 22:31:57.869: E/AndroidRuntime(23413):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
01-16 22:31:57.869: E/AndroidRuntime(23413):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
01-16 22:31:57.869: E/AndroidRuntime(23413):    at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
01-16 22:31:57.869: E/AndroidRuntime(23413):    at java.util.concurrent.FutureTask.run(FutureTask.java:239)
01-16 22:31:57.869: E/AndroidRuntime(23413):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
01-16 22:31:57.869: E/AndroidRuntime(23413):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-16 22:31:57.869: E/AndroidRuntime(23413):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-16 22:31:57.869: E/AndroidRuntime(23413):    at java.lang.Thread.run(Thread.java:841)
01-16 22:31:57.869: E/AndroidRuntime(23413): Caused by: java.lang.NullPointerException

谢谢

【问题讨论】:

  • 也许你有同样的问题:stackoverflow.com/questions/19825256/… 而且我不相信忙碌的等待是好的也不是必要的
  • 谢谢,我忘记了 myLocationHelper = new LocationHelper(this);

标签: android android-asynctask android-service


【解决方案1】:

你的 logcat 中有它(你没有粘贴最有趣的部分):

原因:java.lang.NullPointerException

NPE 原因可能会在它下面几行。

可能您的 myLocationHelper 为空,请记住始终从 GUI 线程执行 asynctask。

【讨论】:

  • 你说得对,我忘记了这个 myLocationHelper = new LocationHelper(this);如何从服务内部运行 gui 线程上的 asynctask
  • 只需在public void onCreate() 中执行它,您将主要在 Service 中创建线程 - 所以我提到不要在此类线程中运行 AsyncTask。
  • 我想从服务本身调用定位器方法,
  • 你最好使用 locationlistener:developer.android.com/guide/topics/location/…
  • 所以我不需要使用此处找到的教程中的 LocationHelper scotthelme.co.uk/android-location-services
猜你喜欢
  • 2011-05-04
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
相关资源
最近更新 更多