2015-07-09 4 views
0

Я видел несколько примеров, когда люди получают доступ к XML-файлам, подобным ниже, из java.Доступ к xml-строкам из java

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

'GetString (R.string.leaderboard_id) без success'. Можете ли вы это доказать? –

+0

@JaredBurrows Как я могу это доказать? У меня есть это: 'getString (R.string.leaderboard_id)' с 'leaderboard_id', выделенным красным цветом. Когда я запускаю его, я получаю ошибку «Ошибка: (100, 90): не могу найти символьную переменную leaderboard_id' – Madmenyo

+0

Вы пробовали« gradlew clean assembleDebug »? –

ответ

3

Похоже, что вы импортировали неправильный класс R.

import android.R; 

Вам нужен R файл, указывающий на свои собственные ресурсы, а не ресурсы, определенные в Android SDK. Что вам нужно (при условии, что пакет вашего приложения называется net.madmenyo.multiplayertest.android):

import net.madmenyo.multiplayertest.android.R; 
+0

Спасибо, посмотрел повсюду, но ничего не нашел в этом направлении. – Madmenyo

+0

Я получаю предупреждение «неиспользуемый импорт», но моя сборка успешна. – Madmenyo

0

Если вы в Activity, вы можете сделать: getApplicationContext().getResources().getString(R.string.leaderboeard_id)

В Fragment, сделайте следующее: getActivity().getResources().getString(R.string.leaderboard_id)

+0

Я нахожусь в 'AndroidApplication', который расширен из' Activity'.Во всяком случае, использование прежнего кода дает мне ту же ошибку. Тем временем я отправил свой полный код. – Madmenyo

Смежные вопросы