我需要一些帮助来调试我的应用程序。首先:在模拟器和其他一些设备上,我的应用程序运行良好。在我的设备上,我强制关闭(没有强制关闭消息)。
如果应用的 Activity 发生变化,就会发生“崩溃”。
这是 MainActivity
类的一些代码。它只是通过 webview 从网页中读取 html 内容。不,不可能通过 HttpRequest
执行此操作,因为我无法模拟发布请求。
public class MainActivity extends Activity {
public final static String EXTRA_HTML = "com.example.com.test.HTML";
private WebView mWebView;
private ProgressDialog mDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.webView1);
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
mWebView.setBackgroundColor(0);
mWebView.setWebChromeClient(new WebChromeClient() {
public boolean onConsoleMessage(ConsoleMessage cmsg) {
if (cmsg.message().startsWith("MAGIC")) {
mDialog.cancel();
/*HashMap<String, String> message = new HashMap<String, String>();*/
String msg = cmsg.message().substring(5);
Intent intent = new Intent(MainActivity.this,
ReadDataActivity.class);
/*message.put("message", msg);*/
/*intent.putExtra(EXTRA_HTML, message);*/
intent.putExtra(EXTRA_HTML, msg);
startActivity(intent);
}
return false;
}
});
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setPluginState(PluginState.OFF);
mWebView.getSettings().setLoadsImagesAutomatically(false);
mWebView.getSettings().setBlockNetworkImage(true);
mWebView.getSettings().setAppCacheEnabled(true);
mWebView.getSettings().setSavePassword(true);
mWebView.getSettings()
.setCacheMode(WebSettings.LOAD_NORMAL);
mWebView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String address) {
if (address.indexOf("mySession") != -1) {
view.loadUrl("javascript:console.log('MAGIC'+document.getElementsByTagName('html')[0].innerHTML);");
}
});
mWebView.loadUrl("http://www.myurl.de");
}
因此,在 onConsoleMessage()
方法中,我只是将 html 代码传递给另一个读取、解析和显示内容的 Activity 类。
现在的问题是,此时应该加载 ReadDataActivity
类,应用程序只是关闭并返回主屏幕,没有任何消息或用户对话框。
作为字符串传递给 ReadDataActivity
的 html 代码是否可能很大?我也尝试将 html 代码作为字符串添加到 HashMap 中,但问题是一样的。
一些想法我可以做些什么来调试问题?也许我应该尝试创建一个 Parcelable
对象?
在模拟器中一切正常。
最佳答案
根据我的经验(不久前),您可以在 IPC 的 Bundle
中打包多达 1MB 的数据。如果在给定时间发生大量事务,则可以减少此限制。更多信息 here .
为了解决这个问题,我建议您将内容保存在临时文件中,并将临时文件的 path/URI 传递给您的第二个 Activity 。然后在您的第二个 Activity 中,从文件中读取内容,执行您想要的操作,最后删除该文件。
如果您愿意,您也可以为此任务合并 Shared_Preferences - 如果您认为处理文件很麻烦。
关于java - Intent putExtra 方法的最大长度? (强制关闭),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12496700/