1

AsyncTaskのサブクラスであるDownloadFileクラスを終了しようとしています。したがって、これはクラスのコードです。

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スレッドで実行されるため、問題は発生しません。また、私を悩ませているもう1つの点は、ダウンロードが終了しないか、まったく開始されないことです。DownloadFile.execute(link)関数を呼び出す関数を呼び出すと、onPostExecute関数が即座にアクティブになります...助けてくれてありがとう

編集:dlはProgressDialogであり、dlf.execute(link)が呼び出される前に初期化されるため、NullPointerExceptionの原因にはなりません...編集:要求された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)

または、Notepad ++で確認したい場合は、次のリンクを参照してください: ログ

4

2 に答える 2

3

http://developer.android.com/reference/android/os/AsyncTask.html「4つのステップ」という見出しの下のトピックを見てください。

トーストに対してNullPointerExceptionが発生しています。たとえばMainActivityからasynctaskを呼び出す場合は、

試す

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

アクティビティコンテキスト、テキスト、および期間をパラメータとしてmakeTextに渡す必要があります。

                                   OR

Eng.Fouadが示唆しているように、あなたのdlはnullです。

于 2013-03-22T18:52:56.543 に答える
1

これは、が原因であると思わdlnullます。したがって、への最初の呼び出しでonProgressUpdate()、aNullPointerExceptionがスローされ、のcatch-bockによってキャッチされdoInBackground()ます。

次に、onPostExecute()が呼び出されてNullPointerException再度スローされますが、今回はアプリケーションのandroidメインランチャーに伝播されます。

于 2013-03-22T18:47:23.643 に答える