是否可以将 else-if 语句存储在 XML 文件中并从活动中调用它?
Posted
技术标签:
【中文标题】是否可以将 else-if 语句存储在 XML 文件中并从活动中调用它?【英文标题】:Is it possible to store else-if statements in a XML file and call it from activity? 【发布时间】:2013-12-27 18:01:49 【问题描述】:我正在做一个项目,我在 assets 文件夹中放置了数千个 html 文件,我想在 webview 中打开它们,但问题是我的 java 文件中不能有这么大的代码。我想知道是否有任何方法可以将 else-if 语句存储在 XML 文件 (statements.xml) 中并在我的类文件中引用 XML 文件。
这是我的代码:
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/games.html");
else if(pos==1) web.loadUrl("file:///android_asset/softwares.html");
else if(pos==2) web.loadUrl("file:///android_asset/music.html");
else if(pos==3) web.loadUrl("file:///android_asset/themes.html");
else if(pos==4) web.loadUrl("file:///android_asset/wallpapers.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);
【问题讨论】:
【参考方案1】:为什么不直接用pos
值创建URL?您将避免使用 if/else 语句。
应该是这样的
int pos = getIntent().getIntExtra("key",0);
String url = "file:///android_asset/"+pos+".html"
web.loadUrl(url);
好的,您似乎有不同的文件名。因此,您可以将它们存储在地图中。
Map<Integer, String> map = new HashMap<>();
map.put(0,"games");
map.put(1,"softwares");
map.put(2, "music");
/*****
And so on
*****/
int pos = getIntent().getIntExtra("key",0);
String url = "file:///android_asset/"+map.get(pos)+".html"
web.loadUrl(url);
【讨论】:
因为我有问题,所以请不要问问题,如果可以,请回答我的问题。 现在检查我的代码,我无法重命名 1-999 之间的所有文件(因为我不想!!) @AnonymousMap<Integer, String> map = new HashMap<>();
以 HashMap
为例。
我只想将语句存储在允许大量代码的其他地方。你的代码听起来我必须在 map.put(0,"games");thing :,( 我已经告诉过我不能在类文件中包含如此大量的代码,因为它63356 字节限制因为我有数千个 html 文件 :,( 现在我不知道如何让你理解这一切......
由于您不想重命名文件并且您不想在代码中创建哈希图(据我所知,您在 java 文件中存在长代码问题),您可以创建带有 url 的字符串数组资源,在代码中只需根据 pos 从字符串数组中请求项目【参考方案2】:
创建一个字符串数组: 在 res/values 文件夹中创建一个资源文件让我们说 html_list.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array
name="html_map">
<item
>file:///android_asset/softwares.html</item>
<item>file:///android_asset/softwares2.html </item>
</string-array>
</resources>
等等。
在代码中可以使用
String[] pages = getStringArray(R.array.html_map);
然后使用 web.loadUrl(pages[pos]);
【讨论】:
我在哪里添加 String[] pages = getStringArray(R.array.html_map);在我的代码中?我必须从我的代码中删除哪些行? :,( 我也得工作,不能只待在这里。所以你建立你的字符串数组,你可以在 web.getSettings() 行之后使用 String[] pages 部分。您必须删除大量 if else 部分,而不是使用 web.loadUrl(pages[pos]);方法。【参考方案3】:您可以使用以下代码。
int pos = getIntent().getIntExtra("key",0);
web.loadUrl("file:///android_asset/"+pos+".html");
【讨论】:
【参考方案4】:在您的assets
文件夹中维护xml file
,该文件夹可以解析并随时读取。
即:
mapping.xml
<array>
<dict>
<Index>1</Index>
<PageName>games.html</PageName>
</dict>
<dict>
<Index>2</Index>
<PageName>softwares.html</PageName>
</dict>
<dict>
<Index>3</Index>
<PageName>music.html</PageName>
</dict>
</array>
现在,每当您要加载页面时,都可以相应地识别它。
希望对你有帮助!!
【讨论】:
【参考方案5】:String url = "file:///android_asset/"+pos+".html";
web.loadUrl(url);
【讨论】:
亲爱的@GopalRao 我已经回答然后问题被更改或编辑了!!以上是关于是否可以将 else-if 语句存储在 XML 文件中并从活动中调用它?的主要内容,如果未能解决你的问题,请参考以下文章