从另一个类

时间:2015-08-03 15:51:46

标签: android arrays

我假设这是一个非常基本的错误,但是我试图从另一个类中获取ArrayAdapter的StringArray。我甚至不确定我是否有正确的想法,我是自学初学者,所以任何帮助都非常感激。

我的MainActivity.java片段:

    Gold gold = new Gold();
    ArrayAdapter<String> ArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, gold.maxArray(highestLevel));
    ArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

我的Gold.java片段:

public class Gold extends MainActivity{

String[] maxUpgradeLevel;

public String[] maxArray (int maxLevel) {
    if (maxLevel == 1){
        return maxUpgradeLevel = getResources().getStringArray(R.array.level1_entries_spinner);
    } else if (maxLevel == 2) {
        return maxUpgradeLevel = getResources().getStringArray(R.array.level2_entries_spinner);
    } else if (maxLevel == 3) {
        return maxUpgradeLevel = getResources().getStringArray(R.array.level3_entries_spinner);
    } else if (maxLevel == 4) {
        return maxUpgradeLevel = getResources().getStringArray(R.array.level4_entries_spinner);

依旧......

我的logcat告诉我:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference

所以我在这里试图调整代码几个小时,代码在我使用Integer[]之前工作正常但是当我开始使用String[]时我显然不能更长时间获得资源。

我应该直接将Gold.java的内容放入MainActivity.java中,还是有一种我不知道的方法?

马库斯

2 个答案:

答案 0 :(得分:1)

永远不要为活动类创建实例。只能通过意图创建活动实例。

如果Gold是Gold gold = new Gold();的扩展类或任何其他活动,那么基本上MainActivity是错误的。

更改您的MainActivity电话:

ArrayAdapter<String> ArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, Gold.maxArray(getResources(),highestLevel));

和你的Gold.java

    public class Gold {


        public static String[] maxArray (Resources res, int maxLevel) {
                if (maxLevel == 1){
                    return  res.getStringArray(R.array.level1_entries_spinner);
                } else if (maxLevel == 2) {
                    return  res.getStringArray(R.array.level2_entries_spinner);
                } else if (maxLevel == 3) {
                    return  res.getStringArray(R.array.level3_entries_spinner);
                } else if (maxLevel == 4) {
                    return  res.getStringArray(R.array.level4_entries_spinner);
                }
    //..
            }
        }
    }

答案 1 :(得分:0)

您不应在new扩展的类上使用Activity运算符。在您使用Activity的上下文访问资源之前,Activity必须经历其生命周期。如果您需要从不同的类访问maxArray并且您不想复制代码,则可以将该方法设置为static,并将Context对象作为参数传递。

public class Gold {


   public static String[] maxArray (Context context, int maxLevel) {
      if (maxLevel == 1){
         return context.getResources().getStringArray(R.array.level1_entries_spinner);
      }
      //

您可以在Gold.maxArray(this, maxLevel) onCreate的{​​{1}}中引用Activity。它只在一个地方使用,然后您可以将代码移动为活动的private方法