【问题标题】:Access xml strings from java从java访问xml字符串
【发布时间】:2015-09-28 12:46:08
【问题描述】:

我见过几个例子,人们从 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>

我已经看到使用声称在 LibGDX 设置中获取字符串成功的 android.R 包。但是,我不断遇到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();
    }
}

【问题讨论】:

  • getString(R.string.leaderboard_id) without success。你能证明这一点吗?
  • @JaredBurrows 我怎样才能证明这一点?我有这个:getString(R.string.leaderboard_id)leaderboard_id 以红色突出显示。当我运行它时,我得到Error:(100, 90) error: cannot find symbol variable leaderboard_id
  • 你试过gradlew clean assembleDebug吗?
  • 我试过build &gt; clean project在gradle任务中找不到gradlew clean assembleDebug
  • 通过命令行运行gradlew clean assembleDebug

标签: java android xml android-studio libgdx


【解决方案1】:

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

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

【讨论】:

  • 我在 AndroidApplication 中,它是从 Activity 扩展而来的。无论如何,使用以前的代码会给我同样的错误。与此同时,我发布了我的完整代码。
【解决方案2】:

您似乎导入了错误的R 类。

import android.R;

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

import net.madmenyo.multiplayertest.android.R;

【讨论】:

  • 谢谢,到处找这个,但没有找到任何指向这个方向的东西。
  • 我确实收到“未使用的导入语句”警告,但我的构建成功。
猜你喜欢
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
相关资源
最近更新 更多