空指针异常,同时运行doInBackground方法 [英] null pointer exception while running doInBackground method

查看:143
本文介绍了空指针异常,同时运行doInBackground方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图将文件上传到Dropbox的,我有一个还可以创建一个进度条来检查它的状态,但在执行它抛出异常。
我创建UploadFile类的一个对象,并调用UploadFile的功能,哪些是合格的UploadData.this,MAPI FILE_DIR,文件中的参数。

 公共类UploadFile扩展的AsyncTask<无效,龙,布尔> {
私人DropboxAPI<> MAPI;
私人字符串的mpath;
私人文件MFILE;
私人长期mFileLen;
私人UploadRequest mRequest;
私人语境mContext;
私人最终ProgressDialog支持mDialog;
私人字符串mErrorMsg;
公共UploadFile(上下文的背景下,DropboxAPI<> API,弦乐dropboxPath,
        档案文件)
{
    mContext = context.getApplicationContext();
    mFileLen = file.length();
    MAPI = API;
    的mpath = dropboxPath;
    MFILE =文件;    支持mDialog =新ProgressDialog(背景);
    mDialog.setMax(100);
    mDialog.setMessage(上传+ file.getName());
    mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    mDialog.setProgress(0);
    mDialog.setButton(取消,新OnClickListener(){
        公共无效的onClick(DialogInterface对话,诠释它){
            //这将取消PUTFILE操作
            mRequest.abort();
        }
    });
    mDialog.show();
}@覆盖
保护布尔doInBackground(虚空...... PARAMS){
    尝试{
        FIS的FileInputStream =新的FileInputStream(MFILE);
        字符串路径= +的mpath mFile.getName();
        mRequest = mApi.putFileOverwriteRequest(路径,FIS,mFile.length()
                新ProgressListener(){
            @覆盖
            众长progressInterval(){
                返回500;
            }
            公共无效onProgress(长字节,长的总数){
                publishProgress(字节);
            }
        });        如果(mRequest!= NULL){
            mRequest.upload();
            返回true;
        }    }赶上(DropboxUnlinkedException E){
        mErrorMsg =这个程序没有正确验证。
    }赶上(DropboxFileSizeException E){
        mErrorMsg =该文件是太大,无法上传;
    }赶上(DropboxPartialFileException E){
        mErrorMsg =上传取消;
    }赶上(DropboxServerException E){
        如果(e.error == DropboxServerException._401_UNAUTHORIZED){
        }否则如果(e.error == DropboxServerException._403_FORBIDDEN){
        }否则如果(e.error == DropboxServerException._404_NOT_FOUND){        }否则如果(e.error == DropboxServerException._507_INSUFFICIENT_STORAG​​E){
            // 用户超出配额
        }其他{
            //别的东西
        }
        //这得到Dropbox的错误,翻译成用户的语言
        mErrorMsg = e.body.userError;
        如果(mErrorMsg == NULL){
            mErrorMsg = e.body.error;
        }
    }赶上(DropboxIOException E){        mErrorMsg =网络错误重试。
    }赶上(DropboxParseException E){
        mErrorMsg =Dropbox的错误重试。
    }赶上(DropboxException E){
        mErrorMsg =未知错误,请重试。
    }赶上(FileNotFoundException异常五){
    }
    返回false;
}@覆盖
保护无效onProgressUpdate(长...进度){
    INT百分比=(INT)(100.0 *(双)进展[0] / mFileLen + 0.5);
    mDialog.setProgress(百分比);
}@覆盖
保护无效onPostExecute(布尔结果){
    mDialog.dismiss();
    如果(结果){
        showToast(图片上传成功);
    }其他{
        showToast(mErrorMsg);
    }
}私人无效showToast(弦乐味精){
    吐司错误= Toast.makeText(mContext,味精,Toast.LENGTH_LONG);
    error.show();
}
}

下面是日志(我是新来这个,我不正确地理解日志)

  6月6日至三十○日:18:34.400:W / dalvikvm(422):主题ID = 7:螺纹未捕获的异常退出(组= 0x4001d800)
6月6日至30日:18:34.410:E / AndroidRuntime(422):致命异常:AsyncTask的#1
6月6日至30日:18:34.410:E / AndroidRuntime(422):了java.lang.RuntimeException:执行doInBackground发生错误()
6月6日至30日:18:34.410:E / AndroidRuntime(422):在android.os.AsyncTask $ 3.done(AsyncTask.java:200)
6月6日至30日:18:34.410:E / AndroidRuntime(422):在java.util.concurrent.FutureTask中$ Sync.innerSetException(FutureTask.java:273)
6月6日至30日:18:34.410:E / AndroidRuntime(422):在java.util.concurrent.FutureTask.setException(FutureTask.java:124)
6月6日至30日:18:34.410:E / AndroidRuntime(422):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:307)
6月6日至30日:18:34.410:E / AndroidRuntime(422):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
6月6日至30日:18:34.410:E / AndroidRuntime(422):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
6月6日至30日:18:34.410:E / AndroidRuntime(422):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:561)
6月6日至30日:18:34.410:E / AndroidRuntime(422):在java.lang.Thread.run(Thread.java:1096)
6月6日至30日:18:34.410:E / AndroidRuntime(422):致:显示java.lang.NullPointerException
6月6日至30日:18:34.410:E / AndroidRuntime(422):在com.sachin.UploadFile.doInBackground(UploadFile.java:59)
6月6日至30日:18:34.410:E / AndroidRuntime(422):在com.sachin.UploadFile.doInBackground(UploadFile.java:1)
6月6日至30日:18:34.410:E / AndroidRuntime(422):在android.os.AsyncTask $ 2.call(AsyncTask.java:185)
6月6日至30日:18:34.410:E / AndroidRuntime(422):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:305)


解决方案

请确保您正确初始化

  UploadRequest MAPI;

不这样做将导致一个 NullPointerException异常的onClick 方法被调用。

i am trying to upload a file to dropbox, i have a also create a progress bar to check its status but while executing it throws exception . i created a object of UploadFile class and call the UploadFile function and the argument which are pass are UploadData.this, mApi,FILE_DIR ,file.

public class UploadFile extends AsyncTask<Void, Long, Boolean> {
private DropboxAPI<?> mApi;
private String mPath;
private File mFile;
private long mFileLen;
private UploadRequest mRequest;
private Context mContext;
private final ProgressDialog mDialog;
private String mErrorMsg;
public UploadFile(Context context, DropboxAPI<?> api, String dropboxPath,
        File file) 
{
    mContext = context.getApplicationContext();
    mFileLen = file.length();
    mApi = api;
    mPath = dropboxPath;
    mFile = file;

    mDialog = new ProgressDialog(context);
    mDialog.setMax(100);
    mDialog.setMessage("Uploading " + file.getName());
    mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    mDialog.setProgress(0);
    mDialog.setButton("Cancel", new OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            // This will cancel the putFile operation
            mRequest.abort();
        }
    });
    mDialog.show();
}

@Override
protected Boolean doInBackground(Void... params) {
    try {
        FileInputStream fis = new FileInputStream(mFile);
        String path = mPath + mFile.getName();
        mRequest = mApi.putFileOverwriteRequest(path, fis, mFile.length(),
                new ProgressListener() {
            @Override
            public long progressInterval() {
                return 500;
            }
            public void onProgress(long bytes, long total) {
                publishProgress(bytes);
            }
        });

        if (mRequest != null) {
            mRequest.upload();
            return true;
        }

    } catch (DropboxUnlinkedException e) {
        mErrorMsg = "This app wasn't authenticated properly.";
    } catch (DropboxFileSizeException e) {
        mErrorMsg = "This file is too big to upload";
    } catch (DropboxPartialFileException e) {
        mErrorMsg = "Upload canceled";
    } catch (DropboxServerException e) {
        if (e.error == DropboxServerException._401_UNAUTHORIZED) {
        } else if (e.error == DropboxServerException._403_FORBIDDEN) {
        } else if (e.error == DropboxServerException._404_NOT_FOUND) {

        } else if (e.error == DropboxServerException._507_INSUFFICIENT_STORAGE) {
            // user is over quota
        } else {
            // Something else
        }
        // This gets the Dropbox error, translated into the user's language
        mErrorMsg = e.body.userError;
        if (mErrorMsg == null) {
            mErrorMsg = e.body.error;
        }
    } catch (DropboxIOException e) {

        mErrorMsg = "Network error.  Try again.";
    } catch (DropboxParseException e) {
        mErrorMsg = "Dropbox error.  Try again.";
    } catch (DropboxException e) {
        mErrorMsg = "Unknown error.  Try again.";
    } catch (FileNotFoundException e) {
    }
    return false;
}

@Override
protected void onProgressUpdate(Long... progress) {
    int percent = (int)(100.0*(double)progress[0]/mFileLen + 0.5);
    mDialog.setProgress(percent);
}

@Override
protected void onPostExecute(Boolean result) {
    mDialog.dismiss();
    if (result) {
        showToast("Image successfully uploaded");
    } else {
        showToast(mErrorMsg);
    }
}

private void showToast(String msg) {
    Toast error = Toast.makeText(mContext, msg, Toast.LENGTH_LONG);
    error.show();
}
}

here is the log (i am new to this and i don't understand the log properly)

06-30 06:18:34.400: W/dalvikvm(422): threadid=7: thread exiting with uncaught exception (group=0x4001d800)
06-30 06:18:34.410: E/AndroidRuntime(422): FATAL EXCEPTION: AsyncTask #1
06-30 06:18:34.410: E/AndroidRuntime(422): java.lang.RuntimeException: An error occured while executing doInBackground()
06-30 06:18:34.410: E/AndroidRuntime(422):  at android.os.AsyncTask$3.done(AsyncTask.java:200)
06-30 06:18:34.410: E/AndroidRuntime(422):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
06-30 06:18:34.410: E/AndroidRuntime(422):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
06-30 06:18:34.410: E/AndroidRuntime(422):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
06-30 06:18:34.410: E/AndroidRuntime(422):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
06-30 06:18:34.410: E/AndroidRuntime(422):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
06-30 06:18:34.410: E/AndroidRuntime(422):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
06-30 06:18:34.410: E/AndroidRuntime(422):  at java.lang.Thread.run(Thread.java:1096)
06-30 06:18:34.410: E/AndroidRuntime(422): Caused by: java.lang.NullPointerException
06-30 06:18:34.410: E/AndroidRuntime(422):  at com.sachin.UploadFile.doInBackground(UploadFile.java:59)
06-30 06:18:34.410: E/AndroidRuntime(422):  at com.sachin.UploadFile.doInBackground(UploadFile.java:1)
06-30 06:18:34.410: E/AndroidRuntime(422):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
06-30 06:18:34.410: E/AndroidRuntime(422):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)

解决方案

Make sure you properly initialize

UploadRequest mApi;

as not doing so will cause a NullPointerException when the onClick method is called.

这篇关于空指针异常,同时运行doInBackground方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆