【问题标题】:Minitemplator on android, how to access to template file in asset directory?android上的Minitemplator,如何访问资产目录中的模板文件?
【发布时间】:2012-09-24 00:01:13
【问题描述】:

我正在尝试将 Minitemplator (http://www.source-code.biz/MiniTemplator/) 集成到 android 的应用程序中,但我有点迷失。

我可以访问模板文件,模板文件在资产目录中,我尝试通过这种方式获取文件:

Uri path = Uri.parse("file:///android_asset/index.html");

并以这种方式实例化对象:

MiniTemplator t = new MiniTemplator(path.getPath());

但它向我发送了一个文件或文件夹不存在的 io 异常。

发送文件以实例化我的 minitemplator 对象的正确方法是什么?

这是完整的代码:

package com.kentverger.minitemplator;

import java.io.File;
import java.io.IOException;

import biz.source_code.miniTemplator.MiniTemplator;
import biz.source_code.miniTemplator.MiniTemplator.TemplateSyntaxException;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.webkit.WebView;

public class Template extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_template);

        WebView index = (WebView) findViewById(R.id.indexWebView);

        Uri path = Uri.parse("file:///android_asset/index.html");
        try {
            MiniTemplator t = new MiniTemplator(path.getPath());

            t.setVariable("titulo", "Hola mundo generado desde java");

            String html_code = t.generateOutput();

            index.loadData(html_code, "text/html", null);

        } catch (TemplateSyntaxException e) {
            Log.d("ERROR 1", e.getMessage());
        } catch (IOException e) {
            Log.d("ERROR 2", e.getMessage());
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_template, menu);
        return true;
    }
}

【问题讨论】:

    标签: android android-resources android-assets


    【解决方案1】:

    我解决了从字符串而不是 html 文件加载模板的问题。

    首先我必须创建一个包含模板字符串的规范对象

    MiniTemplator.TemplateSpecification templateSpec = new MiniTemplator.TemplateSpecification();
    

    然后将模板字符串添加到 templateString 属性中

    templateSpec.templateText = "<html><body><h1>${hello}</h1></body></html>";
    

    接下来我们必须用 speciciations 对象实例化 Minitemplator 对象

    t = new MiniTemplator(templateSpec);
    

    我们已经像这样更改模板中变量的值:

    t.setVariable("hello", "Hola Mundo!");
    

    非常感谢:)

    【讨论】:

      【解决方案2】:
       MiniTemplator miniTemplator = openHtmlFileFromAssert(activity, "test.html");
      

      试试这个方法是否有效,有助于从 assert 文件夹中读取 html 文件

       public MiniTemplator openHtmlFileFromAssert(Activity activity, String fileName) {
      
          try {
              AssetManager assetManager = activity.getAssets();
              InputStream inputStream = assetManager.open(fileName);
              MiniTemplator.Builder templateBuilder = new MiniTemplator.Builder();
              return templateBuilder.build(inputStream, Charset.defaultCharset());
          } catch (IOException e) {
              e.printStackTrace();
              return null;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-02-05
        • 1970-01-01
        • 2011-09-10
        • 1970-01-01
        • 2013-09-28
        • 1970-01-01
        • 2013-07-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多