【问题标题】:How to get String in a non activity class?如何在非活动类中获取字符串?
【发布时间】:2020-03-20 15:07:01
【问题描述】:

我是 android 应用程序开发的新手。我确实发现了与我的问题相关的问题,但没有一个提供正确的解决方案。 这是我尝试获取字符串的代码。我收到这样的错误

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String android.content.Context.getString(int)”

public class CommonUtils {
    private static Context _context;

    public CommonUtils(Context context) {
        this._context = context;
    }
    public static String convertTimeToHoursMinutesString(long lTimeinMillis){
        // Calculate hours first.
        long hours = TimeUnit.MILLISECONDS.toHours(lTimeinMillis);
        lTimeinMillis -= TimeUnit.HOURS.toMillis(hours);
        // Calculate minutes then.
        long minutes = TimeUnit.MILLISECONDS.toMinutes(lTimeinMillis);
        lTimeinMillis -= TimeUnit.MINUTES.toMillis(minutes);
        // Calculate seconds last.
        //long seconds = TimeUnit.MILLISECONDS.toSeconds(lTimeinMillis);

        StringBuilder str = new StringBuilder(64);
        str.append(hours);

        str.append(_context.getString(R.string.Hour));
        str.append(minutes);
        str.append(_context.getString(R.string.Min));
        //str.append(seconds);
        //str.append(" Seconds");
        return(str.toString());
        }
    }

【问题讨论】:

  • 这能回答你的问题吗? getString Outside of a Context or Activity
  • 您调用getString() 的代码在哪里?您在哪一行收到此异常?
  • 否..它只支持系统资源..我有 string.xml,我需要在我的班级中获取该字符串。 @leopal
  • 我已经编辑了代码。请看一下。 @gprathour

标签: java android


【解决方案1】:

您遇到的问题是NullPointerException on _context

我认为这是因为您已将 _context 声明为 static 变量,并将 convertTimeToHoursMinutesString 声明为 static 方法。

但是您正在构造函数中初始化_context

public CommonUtils(Context context) {
    this._context = context;
}

但由于该方法是静态的,因此您不会创建一个对象来调用它。相反,您将直接通过类名调用它,例如CommonUtils.convertTimeToHoursMinutesString。所以构造函数永远不会被调用,因此_context 为空。

如果你想让它保持静态,那么你可以这样做,

public static String convertTimeToHoursMinutesString(Context _context, long lTimeinMillis){
    // Calculate hours first.
    long hours = TimeUnit.MILLISECONDS.toHours(lTimeinMillis);
    lTimeinMillis -= TimeUnit.HOURS.toMillis(hours);
    // Calculate minutes then.
    long minutes = TimeUnit.MILLISECONDS.toMinutes(lTimeinMillis);
    lTimeinMillis -= TimeUnit.MINUTES.toMillis(minutes);
    // Calculate seconds last.
    //long seconds = TimeUnit.MILLISECONDS.toSeconds(lTimeinMillis);

    StringBuilder str = new StringBuilder(64);
    str.append(hours);

    str.append(_context.getString(R.string.Hour));
    str.append(minutes);
    str.append(_context.getString(R.string.Min));
    //str.append(seconds);
    //str.append(" Seconds");
    return(str.toString());
}

你也可以像context.getResources().getString(R.string.YOUR_STRING);一样访问getString()

【讨论】:

  • 有没有办法通过使用(R.string.thatvalue)初始化字符串数组???
  • @JasmineAntony 检查这个,它可能对你有帮助。 stackoverflow.com/q/4161256/1055241
  • 我想在我的枚举类中初始化 eg..public enum WorkStateEnums { WORK_EMPTY_CAR(000, "WORK_EMPTY_CAR", R.string.xyz);}
  • @JasmineAntony 先试试看,如果遇到任何问题,请先尝试理解并自己解决,如果不起作用,您可以在此处发布新问题。
  • 您好,我收到 NullPointerException(尝试在空对象引用上调用虚拟方法 'android.content.res.Resources android.content.Context.getResources()')
【解决方案2】:

在你的代码中

str.append(_context.getString(R.string.Min));

请替换为

str.append(_context.getResources().getString(R.string.Min));

【讨论】:

    猜你喜欢
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多