我刚刚开始在我的项目中使用luaj,我想在我的lua表中获得字符串内容。例如:
t = {
subTitle = "Haircut",
}
return t;我想要得到字幕的内容,这应该是非常简单的,但我不知道如何做。在我的代码中,我编写了类似以下示例的代码:
public class MainActivity extends ActionBarActivity {
Globals globals = JsePlatform.standardGlobals();
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.text);
try {
LuaValue chunk = globals.loadfile("assets/Test.lua");
String text = chunk.get("t").get("subTitle").call().tojstring();
textView.append(text);
}
catch (Exception e)
{
}
}
}但是它一直告诉我get()只能应用于get函数。如何获取subTitle的内容?非常感谢你的帮助。
发布于 2015-07-21 21:41:38
返回的块表示在执行之前编译的脚本,因此您必须“调用()”块一次才能执行它并获得结果。
也许这个例子更清楚:
Globals globals = JsePlatform.standardGlobals();
LuaValue chunk = globals.load(
"t = {"+
" subTitle = 'Haircut',"+
"};"+
"return t");
LuaValue result = chunk.call(); // Executes the chunk and returns 't'
String text = result.get("subTitle").tojstring();
System.out.println(text);您的脚本还为(全局)变量"t“赋值,这会在全局表中留下一个副作用,因此您也可以直接从全局变量中获取结果(在调用块之后
String text = globals.get("t").get("subTitle").tojstring();
System.out.println(text);发布于 2015-10-05 11:18:39
Java中lua文件的加载和串行遍历。
任意lua文件(test.lua):
return
{
myTable =
{
{ key1 = "a", ... },
{ key1 = "b", ... },
{ key1 = "c", ..., key5 = {key5.1="d", ...} }
}
}java是这样的(Android):
public static void loadLua(InputStream in)
{
// Loading and serial traversal of a lua file in Java.
//
// create an environment to run in
Globals globals = JsePlatform.standardGlobals();
LuaValue chunk = globals.load(in, "@"+"test.lua", "bt");
LuaClosure closure = new LuaClosure(chunk.checkclosure().p, globals);
//You must invokink ze closure to get ze data!
LuaTable table = closure.call().checktable().get("myTable").checktable();
//Serial traversal to an output stream.
int l = table.length();
for (int i =1;i<=l;i++)
{
System.out.println("---------------------------------------");
System.out.println("key1:"+table.rawget(i).get("key1"));
System.out.println("key2:"+table.rawget(i).get("key2"));
System.out.println("key3:"+table.rawget(i).get("key3"));
System.out.println("key4:"+table.rawget(i).get("key4"));
// Key5 is a nested hash table
LuaValue key5 = table.rawget(i).get("key5");
if( !key5.isnil())
{
System.out.println("Key5");
LuaValue[] keys = key5.checktable().keys();
for (int j = 0; j<keys.length; j++)
{
System.out.println(" ["+keys[j]+"]"+"key5.1:"+key5.checktable().get(keys[j]).get("key5.1"));
System.out.println(" ["+keys[j]+"]"+"key5.2:"+key5.checktable().get(keys[j]).get("key5.2"));
System.out.println(" ["+keys[j]+"]"+"key5.3:"+key5.checktable().get(keys[j]).get("key5.3"));
}
}
}
}编辑:如果任何人想要离开等效的jSON转换器,我将向上投票。
发布于 2020-07-13 17:17:52
假设我们有一段用lua编写的示例代码:
t = { subTitle = "Haircut", }
您可以在lua中执行此操作,以便仅解析特定的数据
function getSubtitle() return t.subTitle end
在java中,要检索数据:
String v = globals.get("getSubtitle").invoke().toString();
https://stackoverflow.com/questions/31523355
复制相似问题