- 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/
WPF 文档和教程指出 WPF 与分辨率无关,据我所知,它会在不同分辨率(1600x1200 -> native 和 1024x768)和/或 DPI 设置下显示相同大小的窗口。但是,当我尝试示例应用
对于我的应用程序,我分析了 Kinect v2 的空间分辨率。 为了分析空间分辨率,我记录了一个垂直平面到给定距离的平面,并将平面的深度图转换为点云。然后我通过计算欧几里得距离将一个点与他的邻居进行比
有没有办法在 Android 上的 OpenGL ES 2.0 中将场景渲染为正常分辨率,然后将屏幕的另一部分渲染为较低分辨率? 如果我使用 GLES20.glViewPort() 并更改分辨率,它不
使用 CameraX.LensFacing.FRONT 时出现此错误, 在模拟器上测试 E/AndroidRuntime: FATAL EXCEPTION: main Process: met
我没有使用Firebase,这似乎是other问题的原因people 这是错误的屏幕截图: 这是我的依赖项列表: dependencies { implementation project('
我正在按照教程 (link) 将图像上传到 Firebase 数据库,但出现以下错误。我重新检查了 gradle 依赖项并启用了 multidex 支持,但错误仍然存在 java.lang.NoC
我正在尝试使用 durandal,但出现此错误: 错误: bower requirejs extra-resolution Unnecessary resolution: requirejs#~2.2
我的应用程序被苹果拒绝了,原因是“iPhone 应用程序还必须在 iPad 上运行而无需修改,iPhone 分辨率和 2X iPhone 3GS 分辨率”。Apple 建议“为了支持 iPad 3GS
我在我的网站上显示用户的gravatr图像。我怎么知道要使用的最佳高分辨率?例如哪个参数应该是“ s”。 https://secure.gravatar.com/avatar/?s=250 当然,这取
我正在开发一个网站,但我不知道“支持”的最低分辨率应该是多少。我知道它可以在所有分辨率下运行,但“支持”是指所有内容都适合页面而不需要左右滚动。我是否应该考虑“支持”1024x768? 最佳答案 除了
有谁知道ImageNet中图片的分辨率数据集? 抱歉,我在他们的网站或任何 papers 中都找不到它。 . 最佳答案 图像的尺寸和分辨率各不相同。许多应用程序将所有图像的大小调整/裁剪为 256x2
我已经陷入了这个问题:我需要使用 DPI=1200 和特定的打印尺寸来绘制图像。 默认情况下 png 看起来不错... png("test.png",width=3.25,height=3.25,un
我有一个包含 16.000 个条目的测量数组,形式为 [t] [value] 问题是我的数据记录器太慢了,我每秒只有测量点。对于我的模拟,我需要增加伪分辨率。这样每个时间步都除以 1000,每个测量值
我正在尝试使用“分辨率”媒体查询来确定屏幕的实际 DPI。 我正在做的代码是这样的: window.matchMedia(`(resolution: ${value}dpi)`).matches 但我
我正在开发一款支持多种分辨率的应用。我已经通过了http://developer.android.com/guide/practices/screens_support.html但找不到解决方案。 决
我已经从 GitHub 中提取了文件。现在我需要创建一个合并冲突。 如何在 GitHub 上故意创建合并冲突? 最佳答案 在两个分支中编辑同一行,并尝试合并 Merge conflicts in gi
有什么方法可以更改分辨率或为亚马逊 Kindle 键盘上的屏幕设置不同的边界?我的屏幕有一部分出现裂纹,我想解决这个问题。 我试过在文件系统中乱搞(通过 WiFi 连接),但我的所有属性更改都没有任何
This question already has answers here: Closed 11 years ago. Duplicate: Recommended website resoluti
Closed. This question is opinion-based。它当前不接受答案。 想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。 6年前关闭。
我在网站的几个部分中使用了 tinyscrollbar 插件。到目前为止,它运行良好。但现在由于某种原因,鼠标滚轮可以滚动,但拖放 slider 不能滚动。 我使用的分辨率是 1360x768,但我在
我是一名优秀的程序员,十分优秀!