从 java 访问 xml 个字符串

Access xml strings from java

我见过几个例子,人们从 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 设置中成功获取字符串。但是,我将 运行 保留为 error: cannot find symbol variable leaderboard_id,leaderbord_id 是我目前尝试的唯一变量。

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

我的 strings.xml 驻留在 ../android/res/values/ 中,我试图像 getString(R.string.leaderboard_id) 一样访问它但没有成功。此外,我尝试了 Sync project with gradle 和不同的 API 和构建。

我正在使用官方的 Google BaseGameUtils,它提供 bootstrap warning about classpath not being set 但我没有发现任何问题。我开始怀疑这是否可行或是否已更改,因为我发现的有关此内容的帖子已经过时了。

这是我的完整代码:

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();
    }
}

如果您在 Activity,您可以: getApplicationContext().getResources().getString(R.string.leaderboeard_id)

Fragment 中,执​​行: getActivity().getResources().getString(R.string.leaderboard_id)

看来你输入错误了Rclass。

import android.R;

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

import net.madmenyo.multiplayertest.android.R;