2013-07-10 92 views
1

我有这个Asynctask应该计算用户的位置。 Asynctask中的代码在Asynctask之外工作良好,所以我知道我的错误在于安排Asynctask,这是我很不熟悉的。Asynctask崩溃,找不到原因

的AsyncTask由该行一个onClick方法冲了进去:

new GetCurrentCity().execute(); 

这里是GetCurrentCity本身:

private class GetCurrentCity extends AsyncTask<String, Void, String>{ 



    @Override 
    protected String doInBackground(String... args) { 
     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
     Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
     double longitude = location.getLongitude(); 
     double latitude = location.getLatitude(); 


      Geocoder gcd = new Geocoder(getApplicationContext(), Locale.getDefault()); 
      try { 
       List<Address> addresses = gcd.getFromLocation(latitude, longitude, 1); 
       if(addresses != null) { 
        Address returnedAddress = addresses.get(0); 

        for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) { 
        strReturnedAddress = (returnedAddress.getAddressLine(i)).toString(); 
     } 
       } 
      } 

        catch (IOException e) { 
         e.printStackTrace(); 
        } 

     return strReturnedAddress; 
    } 
     protected void onPostExecute(String useless2){ 
      test.setText(strReturnedAddress); 
     } 
     } 

正如我刚才所说,我用不同的线程总新手,所以请对不起,如果这是一个非常简单的问题。

此外,我仍然严重的参数挣扎,所以我觉得问题是与他们的;然而,在我来这里问问之前,我已经尝试了所有我能想到的东西。

预先感谢您,祝您有美好的一天!

编辑:这是当前的logcat

07-10 20:24:08.175: D/OpenGLRenderer(15827): Enabling debug mode 0 
07-10 20:24:08.435: I/TextToSpeech(15827): Connected to ComponentInfo{com.google.android.tts/com.google.android.tts.GoogleTTSService} 
07-10 20:24:13.460: W/dalvikvm(15827): threadid=13: thread exiting with uncaught exception (group=0x41471930) 
07-10 20:24:13.465: E/AndroidRuntime(15827): FATAL EXCEPTION: AsyncTask #3 
07-10 20:24:13.465: E/AndroidRuntime(15827): java.lang.RuntimeException: An error occured while executing doInBackground() 
07-10 20:24:13.465: E/AndroidRuntime(15827): at android.os.AsyncTask$3.done(AsyncTask.java:299) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at java.lang.Thread.run(Thread.java:856) 
07-10 20:24:13.465: E/AndroidRuntime(15827): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
07-10 20:24:13.465: E/AndroidRuntime(15827): at android.os.Handler.<init>(Handler.java:197) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at android.os.Handler.<init>(Handler.java:111) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at android.location.LocationManager$ListenerTransport$1.<init>(LocationManager.java:197) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at android.location.LocationManager$ListenerTransport.<init>(LocationManager.java:197) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at android.location.LocationManager.wrapListener(LocationManager.java:820) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at android.location.LocationManager.requestLocationUpdates(LocationManager.java:833) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at android.location.LocationManager.requestLocationUpdates(LocationManager.java:430) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at com.example.realapptest1.MainActivity$GetCurrentCity.doInBackground(MainActivity.java:306) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at com.example.realapptest1.MainActivity$GetCurrentCity.doInBackground(MainActivity.java:1) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
07-10 20:24:13.465: E/AndroidRuntime(15827): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
07-10 20:24:13.465: E/AndroidRuntime(15827): ... 4 more 
+2

发布错误日志,这个错误 - 您当前正在运行的这个与没有参数 – Rarw

+0

有一件事帮助我理解AsyncTask是为了确保我在'doInBackground','onProgressUpdate'和'onPostExecute'上放置'@ Override'声明并观察发生了什么,因为我改变了'extends'部分中的类型。你会看到他们都是如何相关的。 –

回答

0

我仍然严重带参数的挣扎,所以我觉得这个问题是与他们

params通过doInBackground()取自​​来。所以无论你放在那个方法里面,都会被发送到doInBackground()。您可以把String在那里或Stringvargs或更改doInBackground()不接受String

 protected String doInBackground(Void... args) 

那么你AsyncTask声明改为

private class GetCurrentCity extends AsyncTask<Void, Void, String> 

doInBackground()它的值返回到onPostExecute()因为你似乎做,但你没有使用发送的值,所以没有理由return它。

onProgressUpdate()需要paramspublishProgress()doInBackground()做更新ProgressBar

没有看到你的logcat的,很难说你有什么问题,不过这是你将如何发送paramsAsyncTask

AsyncTask Docs

+0

我已经完成了你告诉我要做的事情。执行GetCurrentCity时崩溃仍然存在。 Logcat只在$ GetCurrentCity/doInBackground()中显示错误。 –

+0

这是什么错误?在你的问题中发布logcat – codeMagic

+0

我编辑了我的问题,因此它包含logcat。 –