Java onPostExecute void上的NullException

Java onPostExecute void上的NullException,java,android,download,android-asynctask,Java,Android,Download,Android Asynctask,我正在尝试完成我的DownloadFile类,它是AsyncTask的一个子类。 这是这个类的代码: private class DownloadFile extends AsyncTask<String, Integer, String> { @Override protected String doInBackground(String... sUrl) { try { URL url = new U

我正在尝试完成我的DownloadFile类,它是AsyncTask的一个子类。 这是这个类的代码:

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.executelink函数的函数时,onPostExecute函数会立即激活。。。谢谢你的帮助

EDIT:dl是在调用dlf.executelink之前初始化的ProgressDialog,因此这不应成为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)
或者,如果您想在记事本++中查看它,请参见以下链接:

我怀疑这是因为dl为null,所以在第一次调用onProgressUpdate时,会抛出一个NullPointerException,并由doInBackground中的catch bock捕获

接下来,调用onPostExecute并再次抛出NullPointerException,但这次它被传播到应用程序的android主启动器。

我怀疑这是因为dl为null,所以在第一次调用onProgressUpdate时,一个NullPointerException被doInBackground中的catch bock抛出并捕获

接下来,调用onPostExecute并再次抛出NullPointerException,但这次它被传播到应用程序的android主启动器。

。请看标题“4个步骤”下的主题

你得到了NullPointerException的祝酒词。如果您从say main活动调用asynctask,那么

试一试

您应该将活动上下文、文本和持续时间作为参数传递给makeText

                                   OR
根据Eng.Fouad的建议,您的dl为空。

。请看标题“4个步骤”下的主题

你得到了NullPointerException的祝酒词。如果您从say main活动调用asynctask,那么

试一试

您应该将活动上下文、文本和持续时间作为参数传递给makeText

                                   OR

根据Eng.Fouad的建议,您的dl为空。

请发布您的所有Logcat错误以及您在哪里定义dl?确定尝试将toast显示为:toast.makeTextYour_Current_Fragment.this.getActivity,Podaci uspešno preuzeti,toast.LENGTH_SHORT.show;我认为不能在异步任务上调用getActivity,是吗?我可能错了…@卡宾是对的,这就是为什么我得到了致命的例外。然而,我的DownloadFile类为什么不下载文件仍然没有答案:这个类在DialogFragment中吗?如果是这样,dl是作为DialogFragment的一部分返回的对话框吗?请发布所有Logcat错误,以及在何处定义dl?确定尝试将toast显示为:toast.makeTextYour_Current_Fragment.this.getActivity,Podaci uspešno preuzeti,toast.LENGTH_SHORT.show;我认为不能在异步任务上调用getActivity,是吗?我可能错了…@卡宾是对的,这就是为什么我得到了致命的例外。然而,我的DownloadFile类为什么不下载文件仍然没有答案:这个类在DialogFragment中吗?如果是这样的话,dl是作为DialogFragment的一部分返回的对话框吗?我忘了说dl是初始化的,它是执行dlf之前的ProgressDialog。它当然不是null,但我无法确定的是:@user2200454 Try Log.ddl,dl==null位于doInBackground的第一行。为什么不发布堆栈跟踪?它应该出现在adb logcatI提供的输出中,我考虑过截图,但因为我是新手,所以我必须复制文本。我将在原始问题中发布它。谢谢,我忘了说dl已经初始化了。在执行dlf之前,它是一个ProgressDialog。它当然不是null,但我无法确定的是:@user2200454 Try Log.ddl,dl==null位于doInBackground的第一行。为什么不发布堆栈跟踪?它应该出现在adb logcatI提供的输出中,我考虑过截图,但因为我是新手,所以我必须复制文本。我将在原始问题中发布它。谢谢,不是的。它未使用。请检查answerA NullPointerException的突出显示部分。每当调用实例方法或访问引用null点的引用变量上的实例字段时,都会引发NullPointerException。传递的结果根本不被使用。不,它不是。它未使用。请检查answerA NullPointerException的突出显示部分。每当调用实例方法或访问引用null点的引用变量上的实例字段时,都会引发NullPointerException。传递的结果根本不被使用。