2013-03-22 55 views
1

我試圖完成我的DownloadFile類,它是AsyncTask的子類。 所以這是類的代碼:onPostExecute上的NullException void

private class DownloadFile extends AsyncTask<String, Integer, String> 
{ 
    @Override 
    protected String doInBackground(String... sUrl) 
    { 
     try 
     { 
      URL url = new URL(sUrl[0]); 
      URLConnection urlc = url.openConnection(); 
      urlc.connect(); 
      int fileLength = urlc.getContentLength(); 
      InputStream is = new BufferedInputStream(url.openStream()); 
      OutputStream os = new FileOutputStream(Environment.getDataDirectory().getAbsolutePath().concat("data/com.markosoft.maturko/databases/proba.mp3")); 
      byte Data[] = new byte[1024]; 
      long total = 0; 
      int count; 
      while((count=is.read(Data))!=-1) 
      { 
       total+=count; 
       publishProgress((int)total * 100/fileLength); 
       os.write(Data,0,count); 
      } 
      os.flush(); 
      os.close(); 
      is.close(); 
     } 
     catch(Exception e) 
     { 

     } 
     return null; 
    } 
    @Override 
    protected void onProgressUpdate(Integer... progress) 
    { 
     dl.setProgress(progress[0]); 
    } 
    @Override 
    protected void onPostExecute(String unused) 
    { 
     dl.dismiss(); 
     Toast.makeText(getActivity(), "Podaci uspešno preuzeti", Toast.LENGTH_SHORT).show(); 
    } 
} 

我得到一個NullPointerException錯誤,也有「線與未捕獲的異常退出」的錯誤。當我添加Toast調用來顯示下載已完成時發生此錯誤,但據我所知onPostExecute在UI線程上執行,所以我沒有看到問題。還有另一件令我困擾的事情是,下載沒有完成,或者說完全沒有啓動。當我打電話給調用DownloadFile.execute(鏈接)函數的函數時,onPostExecute函數會立即激活...感謝您的幫助

編輯:dl是在調用dlf.execute(鏈接)之前初始化的ProgressDialog,不應該是空指針異常的原因... 編輯:這裏的要求logcat的日誌:

03-22 19:56:51.119: W/dalvikvm(546): threadid=1: thread exiting with uncaught exception (group=0x409961f8) 
03-22 19:56:51.140: E/AndroidRuntime(546): FATAL EXCEPTION: main 
03-22 19:56:51.140: E/AndroidRuntime(546): java.lang.NullPointerException 
03-22 19:56:51.140: E/AndroidRuntime(546): at android.widget.Toast.<init>(Toast.java:92) 
03-22 19:56:51.140: E/AndroidRuntime(546): at android.widget.Toast.makeText(Toast.java:233) 
03-22 19:56:51.140: E/AndroidRuntime(546): at com.markosoft.maturko.Upit$DownloadFile.onPostExecute(Upit.java:68) 
03-22 19:56:51.140: E/AndroidRuntime(546): at com.markosoft.maturko.Upit$DownloadFile.onPostExecute(Upit.java:1) 
03-22 19:56:51.140: E/AndroidRuntime(546): at android.os.AsyncTask.finish(AsyncTask.java:602) 
03-22 19:56:51.140: E/AndroidRuntime(546): at android.os.AsyncTask.access$600(AsyncTask.java:156) 
03-22 19:56:51.140: E/AndroidRuntime(546): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 
03-22 19:56:51.140: E/AndroidRuntime(546): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-22 19:56:51.140: E/AndroidRuntime(546): at android.os.Looper.loop(Looper.java:137) 
03-22 19:56:51.140: E/AndroidRuntime(546): at android.app.ActivityThread.main(ActivityThread.java:4340) 
03-22 19:56:51.140: E/AndroidRuntime(546): at java.lang.reflect.Method.invokeNative(Native Method) 
03-22 19:56:51.140: E/AndroidRuntime(546): at java.lang.reflect.Method.invoke(Method.java:511) 
03-22 19:56:51.140: E/AndroidRuntime(546): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
03-22 19:56:51.140: E/AndroidRuntime(546): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
03-22 19:56:51.140: E/AndroidRuntime(546): at dalvik.system.NativeStart.main(Native Method) 

,或者如果你寧願看它在記事本++這裏的鏈接: Log

+2

請寄出你所有的Logcat錯誤,你在哪裏定義'dl'? – Sam 2013-03-22 18:40:18

+1

確定試圖表明舉杯爲:'Toast.makeText(Your_Current_Fragment.this.getActivity(), 「Podaciuspešnopreuzeti」,Toast.LENGTH_SHORT).show();' – 2013-03-22 18:53:47

+1

我不認爲你可以調用'getActivity() '在AsyncTask上可以嗎?我可能是錯的... – Grambot 2013-03-22 18:54:11

回答

3

http://developer.android.com/reference/android/os/AsyncTask.html。看標題下的主題4個步驟

您正在獲取Toast的NullPointerException。如果在調用比如從MainActivity的AsyncTask然後

嘗試

Toast.makeText(MainActivity.this, "Podaci uspešno preuzeti", Toast.LENGTH_SHORT).show(); 

你應該通過活動的情況下,你的文字和持續時間作爲參數傳遞給makeText。

        OR 

正如Eng.Fouad建議您的dl爲null。

+0

不,它不是'未使用' – 2013-03-22 18:53:52

+0

檢查答案中突出顯示的部分 – Raghunandan 2013-03-22 18:56:13

+1

無論何時調用實例方法或訪問引用變量上的實例字段,都會引發'NullPointerException'將(點數)引用爲空,傳遞的結果根本不使用。 – 2013-03-22 19:00:44

1

我懷疑這是因爲dlnull,所以第一次打電話給onProgressUpdate()NullPointerException就被doInBackground()中的catch-bock拋出。

接下來,被調用,NullPointerException被再次拋出,但是這次它被傳播到應用程序的android主啓動器。

+0

我忘了說在dlf執行之前dl被初始化了(它是一個ProgressDialog)。這肯定不是null,但是我不能確定: – user2200454 2013-03-22 18:49:49

+0

@ user2200454在'doInBackground()'的第一行嘗試Log.d(「dl」,dl == null)。 – 2013-03-22 18:51:57

+1

爲什麼不發佈堆棧跟蹤?它應該出現在由「adb logcat」提供的輸出中 – wojciii 2013-03-22 18:52:31