【问题标题】:How to correctly extract strings in Android如何在Android中正确提取字符串
【发布时间】:2015-08-01 16:42:50
【问题描述】:

通过添加和删除我的应用程序的某些部分,我能够确定以下行为字符串代码创建 java 字段导致我的应用程序崩溃(从白屏开始,然后变黑并说应用程序是没有回应);

private final String HIGH_SCORE = getString(R.string.highscore_code);
private final String CURRENT_SCORE = getString(R.string.currentscore_code);

这是我的 strings.xml 文件,我希望使用我在网上进行的研究中的这段代码作为这些字符串的来源;

<resources>
    <string name="app_name">My App</string>
    <string name="action_settings">Settings</string>
    <string name="title_activity_my_menu">MyMenu</string>

    <string name="highscore_code">HIGH_SCORE</string>
    <string name="currentscore_code">LAST_SCORE</string>
</resources>

如果有人知道如何正确加载字符串,我将不胜感激。

【问题讨论】:

  • 发布你的堆栈跟踪
  • 你在哪里调用代码中的 getString()。
  • 抱歉,什么是堆栈跟踪?我对 Android Studio 有点陌生
  • 已接受道歉。阅读此内容:stackoverflow.com/questions/3988788/… 专业提示:在您提问之前尝试 google,您会惊讶于 google 会回答多少问题;)
  • Java 代码在我的 MainGame 类中被调用,该类继承自 Activity。这是我的主要活动,在应用启动时加载。

标签: java android xml string


【解决方案1】:

getString(...) 需要一个正确初始化的 android 组件(Fragment、Activity、Service ......)。那就是它必须处于正确的生命周期状态。

适用于在调用 onCreate 时或之后且在调用 onDestroy 之前的活动。对于将是onAttachonDetach 的片段,等等。您可能应该搜索 Activity 生命周期Fragment 生命周期

所以你不能使用getString() 来初始化类常量。

您可以通过在 Activity 中覆盖 onCreate 来设置变量。

private String highScore;
private String currentScore;

@override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(<your_layout>);

    highScore = getString(R.string.highscore_code);
    currentScore = getString(R.string.currentscore_code);
}

【讨论】:

    【解决方案2】:

    试试这个,

    Resources res=c.getResources();
    String name=res.getString(R.string.name);
    

    其中 c 是 Context 对象。

    【讨论】:

    • by c 我猜你的意思是当前的班级?
    • 不,是上下文
    • 你用什么方法执行这些语句?私有最终字符串 HIGH_SCORE = getString(R.string.highscore_code);私有最终字符串 CURRENT_SCORE = getString(R.string.currentscore_code);
    • getApplicationContext() 就足够了吗?
    • 语句在类名声明和构造函数之间的那部分执行,在这里你声明字段(我觉得这样一个菜鸟写这个)
    【解决方案3】:

    您将字段 HIGH_SCORECURRENT_SCORE 定义为类字段。 在这里,如果没有有效的Context Reference,您将无法访问方法getString(),因为该方法是在Context 类中定义的。 因此,您需要在 onCreate() 回调后在 Activity 中调用它。

    【讨论】:

      猜你喜欢
      • 2018-02-11
      • 1970-01-01
      • 2023-03-08
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 2016-11-05
      • 2012-03-03
      相关资源
      最近更新 更多