我正在开发一个简单的项目来自动化 android 应用程序的夜间构建。我已经准备好所有配置(如 bash 脚本、gradle、android-sdk 等)来开始构建。问题是,当我在本地计算机上构建应用程序时,应用程序构建成功并且在手机上运行良好。但是当我在我公司的构建服务器上构建它时,它会在下面给出运行时错误,即使它构建成功;
01-08 05:46:46.688 14675 14721 E AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
01-08 05:46:46.688 14675 14721 E AndroidRuntime: Process: com.vestel.camera, PID: 14675
01-08 05:46:46.688 14675 14721 E AndroidRuntime: java.lang.RuntimeException: An error occurred while executing doInBackground()
01-08 05:46:46.688 14675 14721 E AndroidRuntime: at android.os.AsyncTask$3.done(AsyncTask.java:309)
01-08 05:46:46.688 14675 14721 E AndroidRuntime: at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
01-08 05:46:46.688 14675 14721 E AndroidRuntime: at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
01-08 05:46:46.688 14675 14721 E AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:242)
01-08 05:46:46.688 14675 14721 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
01-08 05:46:46.688 14675 14721 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
01-08 05:46:46.688 14675 14721 E AndroidRuntime: at java.lang.Thread.run(Thread.java:818)
01-08 05:46:46.688 14675 14721 E AndroidRuntime: Caused by: java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.Void[]
01-08 05:46:46.688 14675 14721 E AndroidRuntime: at com.android.camera.CameraActivity$UpdateThumbnailTask.doInBackground(CameraActivity.java:826)
01-08 05:46:46.688 14675 14721 E AndroidRuntime: at android.os.AsyncTask$2.call(AsyncTask.java:295)
01-08 05:46:46.688 14675 14721 E AndroidRuntime: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
01-08 05:46:46.688 14675 14721 E AndroidRuntime: ... 3 more
这种错误的原因可能是什么?我在两台机器上都使用了 sdk 和 gradle 的确切副本,但是当我在服务器上构建它时,它给出了这个错误。顺便说一句,我也在第三台计算机上尝试了相同的过程,它也工作得很好。
这是UpdateThumbnailTask类的doInBackground方法;
private class UpdateThumbnailTask extends AsyncTask<Void, Void, Bitmap> {
private final byte[] mJpegData;
private final boolean mCheckOrientation;
public UpdateThumbnailTask(final byte[] jpegData, boolean checkOrientation) {
mJpegData = jpegData;
mCheckOrientation = checkOrientation;
}
@Override
protected Bitmap doInBackground(Void... params) {
if (mJpegData != null)
return decodeImageCenter(null);
LocalDataAdapter adapter = getDataAdapter();
ImageData img = adapter.getImageData(1);
if (img == null) {
return null;
}
Uri uri = img.getContentUri();
String path = getPathFromUri(uri);
if (path == null) {
return null;
}
else {
if (img.isPhoto()) {
return decodeImageCenter(path);
} else {
return ThumbnailUtils
.createVideoThumbnail(path, MediaStore.Video.Thumbnails.MINI_KIND);
}
}
}
.
.
.
UpdateThumbnailTask 的对象被创建了几次;
if(ImageStorage.getInstance().getImageList().size() == 0) {
Log.w(TAG,"onActivityResult imagelist 0");
Utils.execute(new UpdateThumbnailTask(null, true));
}
.
public void updateThumbnail(final byte[] jpegData) {
Utils.execute(new UpdateThumbnailTask(jpegData, false));
}
.
public void updateThumbnail(boolean videoOnly) {
// Only handle OnDataInserted if it's video.
// Photo and Panorama have their own way of updating thumbnail.
if (!videoOnly || (mCurrentModule instanceof VideoModule)) {
Utils.execute(new UpdateThumbnailTask(null, true));
}
}
提前致谢。