我假设这是一个非常基本的错误,但是我试图从另一个类中获取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中,还是有一种我不知道的方法?
马库斯
答案 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
方法