首页 文章

ListView中的空指针异常

提问于
浏览
-2

我正在尝试用我正在学习的教程创建一个带有图像的listView . 但是我随时运行代码时会得到空指针异常 . 可能是什么问题?

这是我的代码:公共类MainActivity扩展Activity {

String[] memeTitles;
                 String[] memeDescriptions;
                 ListView list;
                 int [] images = {R.drawable.esrb,R.drawable.iconcreativity, 
                 R.drawable.meme1,R.drawable.meme2  R.drawable.meme10,R.drawable.meme7,R.drawable.meme8,R.drawable.mory,R.drawable.number1,
                 R.drawable.share,R.drawable.stats};
         @Override
         protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         Resources res = getResources();
         memeTitles = res.getStringArray(R.array.titles);
         memeDescriptions = res.getStringArray(R.array.descriptions);

        list = (ListView) findViewById(R.id.listView1);
        myListAdapter adapter = new myListAdapter(this, memeTitles, images,  
        memeDescriptions);
        list.setAdapter(adapter);


                  }





            class myListAdapter extends ArrayAdapter<String>{
        Context context;
        int [] images;
        String[] titleArray;
        String [] descriptionArray;

        public myListAdapter(Context c,String[] titles,int[] imgs,String[] desc) 
            {
    super(c, R.layout.single_row,R.id.textView1, titles);
    this.context =c;
    this.images = imgs;
    this.titleArray= titles;
    this.descriptionArray = desc;

           }


          public View getView(int position, View convertView,ViewGroup parent){
              LayoutInflater inflater = (LayoutInflater)  

              context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

          View row =    inflater.inflate(R.layout.single_row, parent,false);

         ImageView myImage = (ImageView) row.findViewById(R.id.imageView1);
         TextView myTitle = (TextView) row.findViewById(R.id.imageView1);
         TextView myDescription = (TextView) row.findViewById(R.id.textView2);

         myImage.setImageResource(images[position]);
     myTitle.setText(titleArray[position]);
     myDescription.setText(descriptionArray[position]);
     return row;

           }
               }

这是我在string.xml中的数组:

<string-array name="titles">
      <item>Meme 1</item>
      <item>Meme 2</item>
      <item>Meme 3</item>
      <item>Meme 4</item>
      <item>Meme 5</item>
      <item>Meme 6</item>
      <item>Meme 7</item>
      <item>Meme 8</item>
      <item>Meme 9</item>
      <item>Meme 10</item>

      </string-array>

        <string-array name="descriptions">
        <item>This is Description1</item>
        <item>This is Description2</item>
       <item>This is Description3</item>
       <item>This is Description4</item>
       <item>This is Description5</item>
       <item>This is Description6</item>
       <item>This is Description7</item>
       <item>This is Description8</item>
        <item>This is Description9</item>
        <item>This is Description10</item>


        </string-array>

这是我的Logcat

06-13 16:54:40.775: E/AndroidRuntime(1387): FATAL EXCEPTION: main
                  06-13 16:54:40.775: E/AndroidRuntime(1387):  

                  java.lang.ClassCastException: android.widget.ImageView cannot be cast

                  to android.widget.TextView
                  06-13 16:54:40.775: E/AndroidRuntime(1387):   at          
                 com.example.mylistview.myListAdapter.getView(MainActivity.java:87)

                 06-13 16:54:40.775: E/AndroidRuntime(1387):    at 
                 android.widget.AbsListView.obtainView(AbsListView.java:2177)

                 06-13 16:54:40.775: E/AndroidRuntime(1387):    at 

                 android.widget.ListView.measureHeightOfChildren(ListView.java:1247)
                 06-13 16:54:40.775: E/AndroidRuntime(1387):    at  
                 android.widget.ListView.onMeasure(ListView.java:1159)

                 06-13 16:54:40.775: E/AndroidRuntime(1387):    at 
                 android.view.View.measure(View.java:15848)

                 06-13 16:54:40.775: E/AndroidRuntime(1387):    at 
                 android.widget.RelativeLayout.measureChild(RelativeLayout.java:698)

                  06-13 16:54:40.775: E/AndroidRuntime(1387):   at  
                  android.widget.RelativeLayout.onMeasure(RelativeLayout.java:494)

                  06-13 16:54:40.775: E/AndroidRuntime(1387):   at 
                  android.view.View.measure(View.java:15848)

                  06-13 16:54:40.775: E/AndroidRuntime(1387):   at 
                  android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)

                 06-13 16:54:40.775: E/AndroidRuntime(1387):    at 

                  android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
                  06-13 16:54:40.775: E/AndroidRuntime(1387):   at  
                   android.view.View.measure(View.java:15848)

                  06-13 16:54:40.775: E/AndroidRuntime(1387):   at 
                  android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
                 06-13 16:54:40.775: E/AndroidRuntime(1387):    at  



    com.android.internal.widget.ActionBarOverlayLayout.onMeasure
                                (ActionBarOverlayLayout.java:302)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.view.View.measure(View.java:15848)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2189)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.view.View.measure(View.java:15848)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1905)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1104)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1284)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.view.Choreographer.doCallbacks(Choreographer.java:562)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.view.Choreographer.doFrame(Choreographer.java:532)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.os.Handler.handleCallback(Handler.java:730)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.os.Looper.loop(Looper.java:137)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at android.app.ActivityThread.main(ActivityThread.java:5103)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at java.lang.reflect.Method.invokeNative(Native Method)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at java.lang.reflect.Method.invoke(Method.java:525)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
06-13 16:54:40.775: E/AndroidRuntime(1387):     at dalvik.system.NativeStart.main(Native Method)

1 回答

  • 1

    这里可能有错误:

    ImageView myImage = (ImageView) row.findViewById(R.id.imageView1);
    TextView myTitle = (TextView) row.findViewById(R.id.imageView1);
    

    您使用相同的ID来获取 ImageViewTextView .

    由于此ID表示 ImageView ,因此 myTitle 显然为null,当您尝试执行此操作时会导致 NullPointerException

    myTitle.setText(titleArray[position]);
    

    因此,根据您的XML文件更改ID,它应该工作 .

相关问题