AsyncTask println需要抛出一条消息No Exception

时间:2016-04-07 08:36:57

标签: android android-asynctask

我的AsyncTask正在记录错误“println需要一条消息”但是我的类中没有抛出异常。该任务在一个Activity中启动,该Activity实现了一个名为TaskCallback的回调接口。在onPostExecute()中,它调用Activity中的回调。从这个回调中,我运行另一个AsyncTask。以下是代码:

public class SaveImageTask extends AsyncTask<byte[], String, File> {

    private static final String IMAGE_DATA_PATH =
            Environment.getExternalStorageDirectory().toString() + "/MyAppFolder/AppImages/";
    private static final String TAG = "SaveImageTask";

    private TaskCallback mTaskCallback;
    private ProgressDialog mProgressDialog;

    public SaveImageTask(TaskCallback taskCallback) {
        mTaskCallback = taskCallback;
    }

    @Override
    protected void onPreExecute() {
        mProgressDialog = new ProgressDialog((Context) mTaskCallback);
        mProgressDialog.setMessage("Saving Image...");
        mProgressDialog.setCanceledOnTouchOutside(false);
        mProgressDialog.setCancelable(false);
        mProgressDialog.show();
    }

    @Override
    protected File doInBackground(byte[]... data) {

        File imageFile = createOutputPictureFile();
        if(imageFile == null) {
            return null;
        }

        try {
            Bitmap image = BitmapFactory.decodeByteArray(data[0], 0, data[0].length);
            FileOutputStream out = new FileOutputStream(imageFile);
            image.compress(Bitmap.CompressFormat.JPEG, 100, out);
            out.flush();
            out.close();
        } catch (IOException e) {
            Log.e(TAG, e.getMessage());
        }

        return imageFile;
    }

    @Override
    public void onPostExecute(File imageFile) {
        if(mProgressDialog != null && mProgressDialog.isShowing()) {
            mProgressDialog.dismiss();
        }


        if(mTaskCallback != null) {
            mTaskCallback.onTaskComplete(imageFile);
        }
    }

    private File createOutputPictureFile() {
        File imageStorageDirectory = new File(IMAGE_DATA_PATH);

        // If the default save directory doesn't exist, try and create it
        if (!imageStorageDirectory.exists()){
            if (!imageStorageDirectory.mkdirs()){
                //Log.e(TAG, "Required media storage does not exist");
                return null;
            }
        }

        // Create a timestamp and use it as part of the file name
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss", Locale.UK);
        String timeStamp = dateFormat.format(new Date());
        String fileName = "img_"+ timeStamp + ".jpg";

        return new File (imageStorageDirectory, fileName);
    }
}

onTaskComplete(文件文件)如下所示:

@Override
public void onTaskComplete(File file) {
    if(file == null) {
        Util.showToast(this, "Save Failed.", Toast.LENGTH_SHORT);
        return;
    }
    notifyDeviceOfNewFile(file);

    ProcessImageTask pit = new ProcessImageTask(this);
    pit.execute(file);
}

记录的错误是:

E/SaveImageTask: println needs a message

正如标题中所说,没有抛出任何异常,代码实际上完成了应该做的事情。我已经将问题缩小到回调中的这行代码:

pit.execute(file);

如果我注释掉这一行,则不会出现错误。我对发生的事情感到有点难过。如果我删除了SaveImageTask中的所有日志记录,它仍会显示,所以其他东西正在记录它。

2 个答案:

答案 0 :(得分:0)

有一个原因是为什么不抛出异常,因为你抓住了它。这是关于try-catch的整个概念。

 try {
            Bitmap image = BitmapFactory.decodeByteArray(data[0], 0, data[0].length);
            FileOutputStream out = new FileOutputStream(imageFile);
            image.compress(Bitmap.CompressFormat.JPEG, 100, out);
            out.flush();
            out.close();
        } catch (IOException e) {
            Log.e(TAG, e.getMessage());
            // normally you do stuff here when it fails.
        }

答案 1 :(得分:0)

我相信&#34; println需要一条消息&#34;如果您将null传递给Log.x(),则显示的是什么。您可能会收到IOException - e.printstacktrace(),这可能会让您更好地了解为什么