- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
真的找不到词,我的项目只是不从一天编译到另一天。
这就是我所做的:
我下载并显示一个 PDF,然后我将其作为保存的 PDF 打印到设备上,然后崩溃发生了。
这是崩溃:
at java.lang.Class java.lang.Class.classForName(java.lang.String, boolean, java.lang.ClassLoader) (Class.java:-2)
at java.lang.Class java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) (Class.java:453)
at java.lang.Class android.webkit.WebViewFactory.getWebViewProviderClass(java.lang.ClassLoader) (WebViewFactory.java:176)
at java.lang.Class android.webkit.WebViewFactory.getProviderClass() (WebViewFactory.java:459)
at android.webkit.WebViewFactoryProvider android.webkit.WebViewFactory.getProvider() (WebViewFactory.java:251)
at android.webkit.WebViewFactoryProvider android.webkit.WebView.getFactory() (WebView.java:2681)
at void android.webkit.WebView.ensureProviderCreated() (WebView.java:2676)
at void android.webkit.WebView.setOverScrollMode(int) (WebView.java:2741)
at void android.view.View.<init>(android.content.Context) (View.java:4815)
at void android.view.View.<init>(android.content.Context, android.util.AttributeSet, int, int) (View.java:4956)
at void android.view.ViewGroup.<init>(android.content.Context, android.util.AttributeSet, int, int) (ViewGroup.java:659)
at void android.widget.AbsoluteLayout.<init>(android.content.Context, android.util.AttributeSet, int, int) (AbsoluteLayout.java:55)
at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int, java.util.Map, boolean) (WebView.java:659)
at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int, int) (WebView.java:604)
at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet, int) (WebView.java:587)
at void android.webkit.WebView.<init>(android.content.Context, android.util.AttributeSet) (WebView.java:574)
at java.lang.Object java.lang.reflect.Constructor.newInstance0(java.lang.Object[]) (Constructor.java:-2)
at java.lang.Object java.lang.reflect.Constructor.newInstance(java.lang.Object[]) (Constructor.java:343)
at android.view.View android.view.LayoutInflater.createView(java.lang.String, java.lang.String, android.util.AttributeSet) (LayoutInflater.java:647)
at android.view.View com.android.internal.policy.PhoneLayoutInflater.onCreateView(java.lang.String, android.util.AttributeSet) (PhoneLayoutInflater.java:58)
at android.view.View android.view.LayoutInflater.onCreateView(android.view.View, java.lang.String, android.util.AttributeSet) (LayoutInflater.java:720)
at android.view.View android.view.LayoutInflater.createViewFromTag(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet, boolean) (LayoutInflater.java:788)
public class ActivityPrintSurvey extends ActivityBase implements MVPView, View.OnClickListener, SendScannedSignedDocumentTask.SendScannedSignedDocumentCallback {
Document document;
Patient patient;
SurveyBundle surveyBundle;
View hider;
Button printBtn;
Button backBtn;
WebView webView;
ProgressBar progressBar;
Switch switcher;
boolean canPrint = false;
PrintManager printManager;
String jobName;
String fileName;
String pdfUrl;
String showPdfUrl;
private int SIGNING_DONE_1 = 105;
int runnableCounter = 0;
final int RUNNABLE_MAX = 3;
private void log(Object o) {
Log.i("PRINTING_ACT", o.toString());
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_print_survey);
log("activity started");
hider = findViewById(R.id.hider);
printBtn = findViewById(R.id.print_btn);
backBtn = findViewById(R.id.back_btn);
webView = findViewById(R.id.web_view);
progressBar = findViewById(R.id.progressbar);
switcher = findViewById(R.id.read_and_accepted_switch);
document = (Document) getIntent().getSerializableExtra("document");
patient = (Patient) getIntent().getSerializableExtra("patient");
surveyBundle = (SurveyBundle) getIntent().getSerializableExtra("survey_bundle");
jobName = this.getString(R.string.app_name) + " Document";
printManager = (PrintManager) this.getSystemService(Context.PRINT_SERVICE);
printBtn.setOnClickListener(this);
backBtn.setOnClickListener(this);
showPDF();
}
private void showPDF() {
log("starting to show pdf");
pdfUrl = document.getPdfUrl();
String embedUrl = "https://docs.google.com/gview?embedded=true&url=";
showPdfUrl = embedUrl + pdfUrl;
progressBar.setVisibility(View.VISIBLE);
hider.setVisibility(View.VISIBLE);
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
if (runnableCounter < RUNNABLE_MAX) {
runnableCounter++;
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(showPdfUrl);
handler.postDelayed(this, 1000);
//Szörnyűséges a helyzet, az android szemét használhatatlan webview nem mindig jeleníti meg a pdf-et, ezért rá kell frissíteni párszor, hogy biztos megjelenítse, ez van.
} else {
progressBar.setVisibility(View.GONE);
hider.setVisibility(View.GONE);
}
}
};
handler.post(runnable);
downloadPDF();
}
public void downloadPDF() {
log("starting to download pdf");
fileName = FileHelper.generateTempFileName();
ANRequest.DownloadBuilder downloadBuilder = AndroidNetworking.download(pdfUrl, FileHelper.getTempFileDirectory(this), fileName);
downloadBuilder.doNotCacheResponse();
ANRequest request = downloadBuilder.build();
request.setDownloadProgressListener(new DownloadProgressListener() {
@Override
public void onProgress(long bytesDownloaded, long totalBytes) {
// do anything with progress
Log.i("ON_PROGRESS", bytesDownloaded + " / " + totalBytes);
}
}).startDownload(new DownloadListener() {
@Override
public void onDownloadComplete() {
// do anything after completion
canPrint = true;
}
@Override
public void onError(ANError error) {
// handle error
Toast.makeText(ActivityPrintSurvey.this, error.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
public void print() {
log("starting to print");
printManager.print(jobName, new PrintDocumentAdapter() {
@Override
public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback) {
InputStream input = null;
OutputStream output = null;
log("onWrite() called for printing");
try {
File file = FileHelper.readTempFile(ActivityPrintSurvey.this, fileName);
input = new FileInputStream(file);
output = new FileOutputStream(destination.getFileDescriptor());
byte[] buf = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buf)) > 0) {
output.write(buf, 0, bytesRead);
}
callback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});
log("onWriteFinished() called for printing");
} catch (Exception e) {
//Catch exception
e.printStackTrace();
log("Exception 1: " + e.getMessage());
} finally {
try {
input.close();
output.close();
} catch (IOException e) {
e.printStackTrace();
log("Exception 2: " + e.getMessage());
}
}
}
@Override
public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras) {
log("onLayout() done");
if (cancellationSignal.isCanceled()) {
callback.onLayoutCancelled();
log("onLayoutCancelled()");
return;
}
PrintDocumentInfo pdi = new PrintDocumentInfo.Builder(fileName/*Ez itt lehet bármi, kiskutya füle, nem kell megegyeznie az alap file nevvel*/).setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build();
callback.onLayoutFinished(pdi, true);
log("onLayoutFinished() called");
}
@Override
public void onFinish() {
FileHelper.deleteTempFiles(ActivityPrintSurvey.this);
log("onFinish() done");
// ha kész a nyomtatás, jöhet a valós aláírás tollal, majd visszafotózás, és feltöltés
new AlertDialog.Builder(ActivityPrintSurvey.this)
.setTitle(getString(R.string.next_step))
.setMessage(getString(R.string.please_scan_the_printed_and_signed_document))
.setPositiveButton(getString(R.string.scan), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
startScanningByCameraPhoto();
}
})
.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
})
.show();
log("showing alert dialog");
}
}, null);
}
public void startScanningByCameraPhoto() {
// start picker to get image for cropping and then use the image in cropping activity
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.start(this);
log("startScanningByCameraPhoto");
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
log("onActivityResult called");
if (resultCode == Activity.RESULT_OK) {
if (requestCode == SIGNING_DONE_1) {
log("RESULT_OK from SIGNING_DONE_1 -> calling .finish()");
Intent intent = new Intent();
intent.putExtra("document", document);
setResult(Activity.RESULT_OK, intent);
finish();
}
} else {
log("1. Error: resultCode NOT RESULT OK");
}
if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (resultCode == RESULT_OK) {
log("RESULT_OK from CROP_IMAGE_ACTIVITY_REQUEST_CODE");
Uri resultUri = result.getUri();
File file = new File(resultUri.getPath());
showLoading();
SendScannedSignedDocumentTask task = new SendScannedSignedDocumentTask(this, this, DatabaseHelper.getInstance().readLoggedInUser().getUserToken(), document, patient, file);
task.execute();
} else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
Exception error = result.getError();
log("2. Error: resultCode NOT RESULT OK: " + error.getMessage());
error.printStackTrace();
}
}
}
@Override
public void handleUploadScannedDocumentAPIDone(String error) {
hideLoading();
if (error != null) {
log("handleUploadScannedDocumentAPIDone, error:" + error);
DialogHelper.showInfo(this, error);
} else {
log("handleUploadScannedDocumentAPIDone -> finishing()");
setResult(Activity.RESULT_OK);
Toast.makeText(this, "✔ " + getString(R.string.uploaded), Toast.LENGTH_LONG).show();
finish();
}
}
@Override
public void onClick(View v) {
if (v.equals(printBtn)) {
if (switcher.isChecked()) {
if (canPrint) {
print();
} else {
Toast.makeText(this, "PDF not found in device. Retrying download...", Toast.LENGTH_LONG).show();
downloadPDF();
}
} else {
DialogHelper.showInfo(this, getString(R.string.please_check_the_checkbox));
}
} else if (v.equals(backBtn)) {
onBackPressed();
}
}
public void hideLoading() {
progressBar.setVisibility(View.GONE);
}
@Override
public void showLoading() {
progressBar.setVisibility(View.VISIBLE);
}
@Override
public void showError(String error, String code) {
hideLoading();
canPrint = false;
DialogHelper.showError(this, error);
log("showing error: " + error);
}
@Override
public void showSuccess(Object... object) {
hideLoading();
String api = object[0].toString();
if (api.equals("eject_patient")) {
log("showSuccess: " + "finishing activity.");
Intent intent = new Intent(this, ActivityWaitingForPatient.class);
startActivity(intent);
finish();
} else {
log("showSuccess: " + "ERROR: " + api + " not equals " + "eject_patient");
}
}
@Override
public void onResume() {
super.onResume();
LayoutTextSizeChanger.changeAllTextSizeInLayout((ViewGroup) findViewById(R.id.main_cont), FontUtil.loadFontSize(this));
log("onResume()" );
}
}
最佳答案
嗯...引用类加载器问题的间歇性问题。 + 一个巨大的堆栈跟踪。
您提供的少量证据可能指向无声的 IO 类型错误。
例如,您正在使用的 android 在运行时动态加载类,并且由于某种原因,它尝试使用的任何 jar 的主机文件夹还包含该 pdf 文件,该文件主动写入/读取...或出于任何原因,整个文件系统分区被标记为锁定。
在这种情况下,您会遇到间歇性的类加载器错误,就像您引用的错误一样。
还有这个:
try {
input.close(); <--- if exception occurs at this point, output will never close.
output.close();
} catch (IOException e) {
e.printStackTrace();
log("Exception 2: " + e.getMessage());
}
......我不知道......老实说,几乎没有什么信息可以引用。例如,您没有发布
finish()
的内容例程,并且该堆栈跟踪不包含对您的代码的引用(至少我可以看到)......所以这是一种在黑暗中的狂野刺伤。
关于java.lang.NoClassDefFoundError : Failed resolution of: Landroid/webkit/PacProcessor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70756680/
我一直在尝试在我的代码中使用 Jar 文件作为库,并且它编译得很好。但是,在运行时,我不断收到 NoClassDefFoundError信息。为什么会这样?我也在编译路径和运行时路径中包含了 Jar
关于Apache-Kafka messaging queue . 我已经从 Kafka 下载页面下载了 Apache Kafka。我已将其提取到 /opt/apache/installed/kafka
我正在尝试使用 Apache DefaultHttpClient 来执行 JSON POST 请求,当我尝试实例化它时它给我一个 NoClassDefFound 错误。 HttpClient clie
当我在模拟器(Nexus One API 22)上测试我的应用程序时,它运行顺利,没有失败。然而,当我在自己的个人手机(三星 Galaxy S5,Android 版本 5.0)上测试该应用程序时,它崩
我需要在python中使用java代码来减少,所以我选择了Jython。一段时间后,我设法弄清楚了如何运行我的代码,但我遇到了最奇怪的事情。当我写作时 from vohmm.corpus import
这是我的mybatis配置。这是我的pom.xml。。当我运行项目时,它显示了错误的原因:org/mybatis/spring/mapper/MapperScannerConfigurer.有没有人能
所以我正在尝试构建一个简单的gradle应用,当我运行它时, geb.ConfigurationLoader$UnableToLoadException: Unable to load configu
假设我有一个主类应用程序,它使用 URLClassLoader 加载子目录 plugins 中的所有 jar: public class App(){ public static void m
我在尝试运行 Netbeans (7.2) 时遇到一个反复出现的错误,上次遇到它时,我发现某个地方可以将所有文件移动到一个新项目。这可能会奏效,但我的项目的规模让这很麻烦。这是踪迹... Except
这个问题已经有答案了: Including all the jars in a directory within the Java classpath (25 个回答) 已关闭 6 年前。 我得到一个
在这里,我正在下载网页源代码,然后将其存储在文本文件中。然后我读取该文件并将其与正则表达式匹配以搜索特定字符串。 没有编译器错误。 Exception in thread "main" java.la
我正在一个“大”的 Maven/Java 项目中工作,无法理解运行应用程序时遇到的错误(它编译正常)。我得到的错误代码是: java.lang.NoClassDefFoundError: Could
对于学校的作业,我需要创建一个类 Blender 来实现一些预定义的东西。我收到了一个 JAR 文件 imagecompositor.jar,它可以完成所有操作并使用 Blender 类。 JAR 文
我遇到了一个问题,即抛出 NoClasDefFoundError。这让我感到困惑,因为我正在使用接口(interface),并且没有类定义应该可用。我已经阅读了一些指向类路径的帖子,但我不认为这是这里
我正在使用 hibernate,在使用 hibernate Connection 时出现如下错误 java.lang.NoClassDefFoundError: Could not initializ
我有一个使用 SubVersion 的 Android 项目。我使用 Subclipse 将项目导入我的 Eclipse Wordspace。 现在我有一个问题: java.lang.NoClass
我需要编译一个外部 java 文件(比如 a.java)。这是我为此编写的代码。 (字符串路径包含java和class文件的路径) command[0] = "javac"; comm
我正在尝试运行一个基本的 Hibernate 程序。当我运行它时,出现以下错误 java.lang.NoClassDefFoundError: org/jboss/logging/BasicLogge
标题:Eclipse插件开发由于java.lang.NoClassDefFoundError无法实例化类: 试图构建一个 eclipse 插件,但遇到一些运行时错误.. 我知道这是由于代码所依赖的类文
我是新手,我无法让它工作......:/ 我的 build.sbt: val apacheDeps = Seq( "commons-validator" % "commons-validator"
我是一名优秀的程序员,十分优秀!