【问题标题】:Getting NullPointer when try to get global ArrayList尝试获取全局 ArrayList 时获取 NullPointer
【发布时间】:2013-01-24 10:09:53
【问题描述】:

我上了 3 节课。 一个主类、globalVariable 类和一个项目类。

我尝试在主类中设置一个 ArrayList。我想在项目类中读出它。
这是我尝试过的:

主要:

for (int i = data.size()-1; i >= 0; i--){
    if (str_tv.contains(data.get(i).getCaption())){
        //TODO data.remove();
        String str_i = String.valueOf(i);
        checkedArray.add(str_i);

    }
}
System.out.println("MainActivity");
global.setArrList(checkedArray);
System.out.println("size = "+global.getArrList().size());

global.setArrlList 在这里工作。 global.getArrList 也在这里工作(我知道我的尺码)。

现在我尝试从 item 类中获取它:

System.out.println("Item Class");
System.out.println("size = "+global.getArrList().size());   <--gives NullPointer

但是在这里,它不起作用,然后它给出了一个 NullPointer。

这是我的全局类:

ArrayList<String> arrList;

public ArrayList<String> getArrList() {
    return arrList;
}

public void setArrList(ArrayList<String> arrList) {
    this.arrList = arrList;
}

我确实检查了他是否可能首先尝试获取ArrayList 而不是设置它。但他在项目类中显示System.out.println("MainActivity");

为什么它会给出一个 NullPointer?我错过了什么?

Logcat:

01-24 11:02:04.755: E/AndroidRuntime(30097): FATAL EXCEPTION: main
01-24 11:02:04.755: E/AndroidRuntime(30097): java.lang.NullPointerException
01-24 11:02:04.755: E/AndroidRuntime(30097):    at com.dlv.GewasBescherming3.ItemListAdapter.getView(ItemListAdapter.java:47)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.widget.AbsListView.obtainView(AbsListView.java:2035)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.widget.ListView.makeAndAddView(ListView.java:1772)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.widget.ListView.fillDown(ListView.java:672)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.widget.ListView.fillFromTop(ListView.java:732)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.widget.ListView.layoutChildren(ListView.java:1625)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.widget.AbsListView.onLayout(AbsListView.java:1865)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.view.View.layout(View.java:11278)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.view.ViewGroup.layout(ViewGroup.java:4224)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.widget.RelativeLayout.onLayout(RelativeLayout.java:925)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.view.View.layout(View.java:11278)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.view.ViewGroup.layout(ViewGroup.java:4224)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.view.View.layout(View.java:11278)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.view.ViewGroup.layout(ViewGroup.java:4224)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1399)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.view.View.layout(View.java:11278)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.view.ViewGroup.layout(ViewGroup.java:4224)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.view.View.layout(View.java:11278)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.view.ViewGroup.layout(ViewGroup.java:4224)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1489)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.os.Looper.loop(Looper.java:137)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at android.app.ActivityThread.main(ActivityThread.java:4575)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at java.lang.reflect.Method.invokeNative(Native Method)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at java.lang.reflect.Method.invoke(Method.java:511)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
01-24 11:02:04.755: E/AndroidRuntime(30097):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 向其中添加静态数据,以便其中包含该数据。

标签: android arraylist nullpointerexception global-variables


【解决方案1】:

其实

ArrayList&lt;String&gt; arrList;null

只需声明为ArrayList&lt;String&gt; arrList = new ArrayList&lt;String&gt;();

更新:

实际上MainItem有不同的全局对象,所以它不能引用相同的arrList

我最好补充一下:

public static ArrayList<String> arrList = new ArrayList<String>();

Global class 中并像这样使用它:

Global.arrList.size();

【讨论】:

  • 而且您还缺少基本的 Java 基础知识.. :-)
  • 它工作了 :) 确实必须更改 public static ArrayList&lt;String&gt; arrList = new ArrayList&lt;String&gt;();。但如果没有static,它就无法工作,static 是什么意思/做什么?
  • static 成员属于类而不是特定实例。这意味着即使您创建了一百万个该类的实例或者您不创建任何实例,静态字段也只存在一个实例。它将被所有实例共享。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多