从 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)
看来你输入错误了R
class。
import android.R;
您需要 R
文件指向您自己的资源,而不是 Android SDK 中定义的资源。您需要的是(假设您的应用程序包名为 net.madmenyo.multiplayertest.android
):
import net.madmenyo.multiplayertest.android.R;
我见过几个例子,人们从 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)
看来你输入错误了R
class。
import android.R;
您需要 R
文件指向您自己的资源,而不是 Android SDK 中定义的资源。您需要的是(假设您的应用程序包名为 net.madmenyo.multiplayertest.android
):
import net.madmenyo.multiplayertest.android.R;