是否可以将 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 之间的所有文件(因为我不想!!) @Anonymous Map&lt;Integer, String&gt; map = new HashMap&lt;&gt;();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 文件中并从活动中调用它?的主要内容,如果未能解决你的问题,请参考以下文章

实验三——for语句及分支结构else-if

第三次作业——for 语句及分支结构else-if

作业3---for语句及分支结构else-if

第三次作业——for 语句及分支结构else-if

实验三——for 语句及分支结构else-if

实验三——for 语句及分支结构else-if