gpt4 book ai didi

javascript - 使用 Android 应用程序运行 HTML5 网站 - 未响应消息

转载 作者:行者123 更新时间:2023-11-29 21:08:14 25 4
gpt4 key购买 nike

如果有人在我的代码中发现一些错误,请告诉我。

我创建了一个 HTML5 网站(多个页面和 JS 文件),我想将其作为 Android 应用程序的一部分,每次我在我的虚拟设备上运行它时,我都会收到一条消息,不幸的是 AppName 没有响应或停止响应(等待/关闭)。我检查了我的 MainActivity 代码,但看不出有什么问题。

我的控制台中没有任何错误,我的 LogCat 中也没有错误。

我的代码应该将文件从 assets 文件夹复制到 sdcard,然后使用 webView 打开 index.html 文件

MainActivity.java(代码)

package com.example.html5;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.res.AssetManager;
import android.util.Log;
import android.view.Menu;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {

private WebView mWebView;
public static final String TAG = "MainActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
copyAssets("ErgonomicsHelp");
mWebView = (WebView) findViewById(R.id.activity_main_webview);
// Enable Javascript
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
// Force links and redirects to open in the WebView instead of in a browser
mWebView.setWebViewClient(new WebViewClient());
mWebView.loadUrl("file:/data/data/com.example.html5/ErgonomicsHelp/data/index.html");
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

private void copyAssets(String path)
{
String[] files = null;

try
{
files = getAssets().list(path);
} catch (IOException e)
{
e.printStackTrace();
}

if (files.length == 0)
copyFile(path);
else
{
File dir = new File(getExternalFilesDir(null), path);

if (!dir.exists())
dir.mkdir();

for (int i = 0; i < files.length; i++)
{
copyAssets(path + "/" + files[i]);
}
}
}

private void copyFile(String filename)
{
InputStream in = null;

File file;
OutputStream out = null;

try
{
in = getAssets().open(filename);
} catch (IOException e)
{
Log.e(TAG, "ERROR WITH in = getAssets().open: " + filename);
e.printStackTrace();
}

file = new File(getExternalFilesDir(null), filename);

try
{
out = new FileOutputStream(file);
} catch (FileNotFoundException e)
{
Log.e(TAG, "ERROR WITH out = new FileOutputStream(file);");
e.printStackTrace();
}

byte[] data;

try
{
data = new byte[in.available()];

in.read(data);
out.write(data);

in.close();
out.close();
} catch (IOException e1)
{
e1.printStackTrace();
}}
}

任何建议将不胜感激。此致,德里克

-- 已编辑 -- 24-05-2014 --

我发生了一些我无法解释的事情。

我已经打包应用程序并在我的设备上运行它,复制 Assets 工作正常并且文件已创建。我已经调整了我的代码

mWebView.loadUrl("file:/mnt/sdcard/android/data/com.example.html5/ErgonomicsHelp/data/index.html");

该应用程序安装正确,但该应用程序未启动,我让它工作的唯一方法是,如果我使用我的文件管理器应用程序直接导航到文件夹,在 index.html 文件上打开选项卡并使用“HTML查看器”(文件夹和齿轮的图像)。

谁知道为什么会这样

最佳答案

您正在主 UI 线程中复制一堆文件,这在 Android 上是绝对“不”的。您需要学习如何使用 AsyncTask 来执行任何耗时的操作,否则您将继续收到这些错误。

这是一个关于如何做到这一点的好博客:http://android.programmerguru.com/what-is-asynctask-in-android/

关于javascript - 使用 Android 应用程序运行 HTML5 网站 - 未响应消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23818955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com