2014-06-14 84 views
0

我已经创建了一个自定义的适配器,把图像放在我的listView中,但在我的textView.setText(文本)中给了我一个空指针异常。android textView.setText()给我空指针异常

这是一部分,当我得到例外我的适配器:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View rowView = inflater.inflate(rowResourceId, parent, false); 
     ImageView imageView = (ImageView) rowView.findViewById(R.id.imageFileView); 
     TextView textView = (TextView) rowView.findViewById(R.id.fileName); 

     int pos = position+4; 

     String name = Names[pos]; 

     String extFile = Names[pos].substring(Names[pos].lastIndexOf(".")+1); 

     String uri = "drawable/"+extFile+".png"; 

     textView.setText(name);  

     Uri imgUri=Uri.parse(uri); 
     imageView.setImageURI(imgUri); 
     return rowView; 
    } 

这是我的logcat当AI有例外:

06-14 12:15:04.616: E/AndroidRuntime(678): FATAL EXCEPTION: main 
06-14 12:15:04.616: E/AndroidRuntime(678): java.lang.NullPointerException 
06-14 12:15:04.616: E/AndroidRuntime(678): at com.example.poc_cubbyhole.ItemAdapter.getView(ItemAdapter.java:59) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:220) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.widget.AbsListView.obtainView(AbsListView.java:1430) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.widget.ListView.makeAndAddView(ListView.java:1745) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.widget.ListView.fillSpecific(ListView.java:1290) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.widget.ListView.layoutChildren(ListView.java:1588) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.widget.AbsListView.onLayout(AbsListView.java:1260) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.view.View.layout(View.java:7175) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:912) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.view.View.layout(View.java:7175) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.view.View.layout(View.java:7175) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.view.View.layout(View.java:7175) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.view.View.layout(View.java:7175) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.view.ViewRoot.performTraversals(ViewRoot.java:1140) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.os.Looper.loop(Looper.java:123) 
06-14 12:15:04.616: E/AndroidRuntime(678): at android.app.ActivityThread.main(ActivityThread.java:3683) 
06-14 12:15:04.616: E/AndroidRuntime(678): at java.lang.reflect.Method.invokeNative(Native Method) 
06-14 12:15:04.616: E/AndroidRuntime(678): at java.lang.reflect.Method.invoke(Method.java:507) 
06-14 12:15:04.616: E/AndroidRuntime(678): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
06-14 12:15:04.616: E/AndroidRuntime(678): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
06-14 12:15:04.616: E/AndroidRuntime(678): at dalvik.system.NativeStart.main(Native Method) 

这是在我的ListView创建项目的xml文件:

<ImageView 
      android:id="@+id/imageFileView" 
      android:layout_width="32dp" 
      android:layout_height="32dp" 
      android:layout_alignParentLeft="true" 
      android:layout_marginLeft="9dp" 
      android:layout_alignParentTop="true"/> 
    <TextView 
      android:layout_alignBottom="@+id/fileName" 
      android:layout_width="97dp" 
      android:layout_height="32dp" 
      android:id="@+id/textView" 
      android:layout_alignParentLeft="true" 
      android:layout_marginLeft="66dp" 
      android:layout_alignParentRight="true" 
      android:gravity="center_vertical"/> 

这是我的列表查看:

<com.example.poc_cubbyhole.widgets.PullToRefreshListView 
    android:id="@+id/list_files" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/button_upload" 
    android:layout_alignParentTop="true" 
    /> 

我用一个小部件来改变加拉和刷新我的ListView

+0

确保你在'rowResourceId'布局中检查'fileName' id并检查'name'的值 –

+0

plz检查你的if(rootView == null)查看rowView = inflater.inflate(rowResourceId,parent,false); – user3295685

+0

发布logcat异常 –

回答

3

更改此

TextView textView = (TextView) rowView.findViewById(R.id.fileName); 

TextView textView = (TextView) rowView.findViewById(R.id.textView); 
getView方法

,因为你TextView编号为textViewfileName

+0

哇,我的上帝,我是个白痴:/ :/非常感谢你 –

+0

@yassine__很高兴帮助,StackOverflow回答所有问题,享受编码。 –

+0

我总是通过findviewbyid()而不是row.findviewbyid()来找到这是第一次你能让我明白为什么要通过行方法找到? –

0

你可能会在阵列得到位置空值在这里:

 int pos = position+4; 

     String name = Names[pos]; 

你可以添加一些imediate解决方案像这样:

int pos = position+4; 

String name = ""+Names[pos]; 

所以你没有空值,不要获得空指针。

现在,如果你想获得NUL值,则调试应用程序了妥善解决,并检查阵列,每执行一次的衣被合计。 好运..

+0

问题仍然存在,编辑自己的帖子:/ –

0

我也面临类似的问题即使我的查看ID是正确的。但最后我改变了ID并清理了项目,然后再构建一次。它工作正常。