java - 从java访问xml字符串

标签 java android xml android-studio libgdx

我见过几个例子,人们从 java 访问如下所示的 .xml 文件。

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">YYYYYYYYY</string>
    <string name="app_id">999999999999</string>
    <string name="leaderboard_id">XXXXXXXXXXX</string>

</resources>

我已经看到 android.R 包的使用,据称可以成功地在 LibGDX 设置中获取字符串。但是,我不断遇到错误:找不到符号变量leaderboard_id,leaderbord_id是我当前尝试的唯一变量。

我尝试清理我的项目,没有出现错误,但再次构建后,每次尝试访问它时都会出现上述错误。

我的 strings.xml 位于 ../android/res/values/ 中,我尝试像 getString(R.string.leaderboard_id ) 没有成功。此外,我尝试了使用 gradle 同步项目以及不同的 API 和构建。

我正在使用官方的 Google BaseGameUtils,它会给出关于未设置类路径的引导警告,但我没有发现任何问题。我现在开始怀疑这是否可能或是否会改变,因为我发现的有关此问题的帖子已经过时了。

这是我的完整代码:

AndroidLauncher.java

package net.madmenyo.multiplayertest.android;

import android.content.Intent;
import android.os.Bundle;
import android.R;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import com.google.android.gms.games.Games;
import com.google.example.games.basegameutils.GameHelper;

import net.madmenyo.multiplayertest.IGoogleServices;
import net.madmenyo.multiplayertest.MultiplayerTest;


public class AndroidLauncher extends AndroidApplication implements IGoogleServices {
    private GameHelper _gameHelper;
    private final static int REQUEST_CODE_UNUSED = 9002;

    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        // Create game helper
        _gameHelper = new GameHelper(this, GameHelper.CLIENT_GAMES);
        _gameHelper.enableDebugLog(false);

        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        initialize(new MultiplayerTest(this), config);
    }

    @Override
    protected void onStart()
    {
        super.onStart();
        _gameHelper.onStart(this);
    }

    @Override
    protected void  onStop()
    {
        super.onStop();
        _gameHelper.onStop();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);
        _gameHelper.onActivityResult(requestCode, resultCode, data);
    }

    @Override
    public void signIn() {
        try {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    _gameHelper.beginUserInitiatedSignIn();
                }
            });
        }
        catch (Exception e)
        {
            Gdx.app.log("MainActivity", "Log in failed: " + e.getMessage());
        }
    }

    @Override
    public void signOut() {
        try
        {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    _gameHelper.signOut();
                }
            });
        }
        catch (Exception e)
        {
            Gdx.app.log("MainActivity", "Log out failed: " + e.getMessage());
        }
    }

    @Override
    public void submitScore(long score) {
        if (isSignedIn() == true)
        {
            Games.Leaderboards.submitScore(_gameHelper.getApiClient(), getString(R.string.leaderboard_id), score); //Error cannot find symbol variable leaderboard_id
getApplicationContext().getResources().getString(R.string.leaderboard_id); //Error
            startActivityForResult(Games.Leaderboards.getLeaderboardIntent(_gameHelper.getApiClient(), getString(R.string.leaderboard_id)), REQUEST_CODE_UNUSED); //Error
        }
        else
        {
        }
    }

    @Override
    public void showScores() {
        if (isSignedIn() == true)
            startActivityForResult(Games.Leaderboards.getLeaderboardIntent(_gameHelper.getApiClient(), getString(R.string.leaderboard_id)), REQUEST_CODE_UNUSED); //Error
        else
        {
        }
    }

    @Override
    public boolean isSignedIn() {
        return _gameHelper.isSignedIn();
    }
}

最佳答案

看来您导入了错误的 R 类。

import android.R;

您需要指向您自己的资源的 R 文件,而不是 Android SDK 中定义的资源。您需要的是(假设您的应用程序的包名为 net.madmenyo.multiplayertest.android):

import net.madmenyo.multiplayertest.android.R;

关于java - 从java访问xml字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31329404/

相关文章:

java - 处理: mousePressed ()/mouseClicked() ticks too often

java - 构造函数中的同步块(synchronized block)有什么用?

android - OpenCV 标志检测 - 使用什么?

java - 为什么此错误显示 "Incompatible Types." "Required: android.support.v4.app.Fragment"?

xml - 如何使用单个 solr 实例或 Solr 模板字段无法正常工作来索引和搜索同一数据源中的两个不同表

java - 是否存在适用于 Android 的轻量级标记语言库?

java - 如何在java oop类中自动增加数据字段

java - 通用方法动态替换参数类型导致异常

xml - XSLT:string-length($variable) 给出错误答案

c++ - 为什么 TinyXML2 的 XMLDocument::FirstChild() 函数在尝试解析这个有效的 XML 文件时返回 NULL?