繁体   English   中英

如何在非活动类中获取字符串?

[英]How to get String in a non activity class?

我是 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());
        }
    }

您遇到的问题是_context上的NullPointerException

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

但是您正在构造函数中初始化_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() context.getResources().getString(R.string.YOUR_STRING);

在你的代码中

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

请用

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM