我的资产目录中有数千个html文件,我必须将它们的位置存储在java文件中,但是java中的堆栈空间有限,这是不允许我这样做的 通过这样做我增加了我的堆栈内存 http://wiki.eclipse.org/FAQ_How_do_I_increase_the_heap_size_available_to_Eclipse%3F
但现在我能够粘贴我的代码,但几秒后我再次得到stackoverflow错误,它提示我终止工作区
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class WebViewActivity extends Activity {
WebView web;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
web = (WebView) findViewById(R.id.webView1);
web.setWebViewClient(new myWebClient());
web.getSettings().setJavaScriptEnabled(true);
int pos = getIntent().getIntExtra("key",0);
if(pos==0){ web.loadUrl("file:///android_asset/1.html");
else if(pos==1){ web.loadUrl("file:///android_asset/2.html");}
else if(pos==2){ web.loadUrl("file:///android_asset/3.html");}
else if(pos==3){ web.loadUrl("file:///android_asset/4.html");}
else if(pos==4){ web.loadUrl("file:///android_asset/5.html");}
// similarly for 4 and 5 and so on.
}
public class myWebClient extends WebViewClient
{
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
return true;
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
}
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
}
}
}
答案 0 :(得分:0)
听起来你根本不应该这样做。如果你的堆栈不足,那不是很正常的事情(除非你做无限递归)。用完堆有点更常见。
你说你有成千上万的html文件,并且你将它们的位置存储在一个java文件中。这听起来真的很糟糕。这些位置应存储在数据库中,或者如果不可能(或者更确切地说,您不想),则将其存储在您读入的外部文件中。
您可以粘贴几行代码,并解释您打算如何处理这些数千个HTML文件,我们会为您提供合适的解决方案。
编辑: 好的。一个合适的解决方案是将URL存储到SQLite数据库中,以“pos”作为主键。那么你只需要一行代码,比如
web.loadUrl(sqlDb.load("select url FROM mytable where pos = " + pos));
这里有一个教程:AndroidSQLite
祝你好运! :)答案 1 :(得分:0)
另一个建议:
if(pos==0){ web.loadUrl("file:///android_asset/1.html");
else if(pos==1){ web.loadUrl("file:///android_asset/2.html");}
else if(pos==2){ web.loadUrl("file:///android_asset/3.html");}
else if(pos==3){ web.loadUrl("file:///android_asset/4.html");}
else if(pos==4){ web.loadUrl("file:///android_asset/5.html");}
我不知道这段代码如何代表你真正在做什么,但在这里看起来你可以计算网址:
String url = "file:///android_asset/" + (pos+1) + ".html";
OTOH,这不是可能导致堆栈溢出的代码。 但是当它发生时,增加堆栈大小,而不是堆大小。 看,如果你的汽车没有燃料,你可以为挡风板清洗器添加气体,而不是水。