arraylist-数组越界的问题.求解决,下面会贴上原代码。 size部分搞不懂

问题描述

数组越界的问题.求解决,下面会贴上原代码。 size部分搞不懂

04-03 11:28:21.283: E/AndroidRuntime(8495): FATAL EXCEPTION: main
04-03 11:28:21.283: E/AndroidRuntime(8495): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
04-03 11:28:21.283: E/AndroidRuntime(8495): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
04-03 11:28:21.283: E/AndroidRuntime(8495): at java.util.ArrayList.get(ArrayList.java:304)
04-03 11:28:21.283: E/AndroidRuntime(8495): at wyf.wpf.ContactsActivity$2.getView(ContactsActivity.java:67)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.widget.AbsListView.obtainView(AbsListView.java:2186)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.widget.ListView.makeAndAddView(ListView.java:1845)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.widget.ListView.fillDown(ListView.java:678)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.widget.ListView.fillFromTop(ListView.java:739)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.widget.ListView.layoutChildren(ListView.java:1661)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.widget.AbsListView.onLayout(AbsListView.java:2037)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.view.View.layout(View.java:14102)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.view.ViewGroup.layout(ViewGroup.java:4474)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.widget.ScrollView.onLayout(ScrollView.java:1462)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.view.View.layout(View.java:14102)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.view.ViewGroup.layout(ViewGroup.java:4474)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1670)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1659)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.widget.LinearLayout.onLayout(LinearLayout.java:1443)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.view.View.layout(View.java:14102)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.view.ViewGroup.layout(ViewGroup.java:4474)
04-03 11:28:21.283: E/AndroidRuntime(8495): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)

解决方案

04-03 11:28:21.283: E/AndroidRuntime(8495): at wyf.wpf.ContactsActivity$2.getView(ContactsActivity.java:67)
已经说在这里越界了,建议你设置断点debug模式然后看一下 list的size ,如果不会上网查查吧很容易的。

解决方案二:

Invalid
index 0, size is 0
表示看到这个很蛋疼。。。
难道你在 list.get(index) 的时候不先判断
if(list!=null && list.size()>0){
list.get(index);
}
不先判断么?

然后你再看做了什么之后你的list
是变为size = 0的

解决方案三:

下面是代码,,
package wyf.wpf;
import static wyf.wpf.ConstantUtil.*;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class ContactsActivity extends Activity{
String uno = null; //记录当前用户的id
int type = -1; //为0表示显示好友列表,为1表示显示访客列表
Bitmap [] headList = null; //存放头像的数组
ArrayList infoList = null; //存放联系人信息的列表如果是好友则为id、姓名、email、状态、头像。若为访客则为id、姓名、日期、头像

MyConnector mc = null;      //网络连接器对象
ListView lv = null;
String [] messageHead = {"<#FRIEND_LIST#>","<#VISITOR_LIST#>"};

BaseAdapter baContacts=null;
Handler myHandler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        switch(msg.what){
        case 0:
            lv.setAdapter(baContacts);
            break;
        }
        super.handleMessage(msg);
    }
};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = getIntent();            //获得启动该Activity的Intent对象
    uno = intent.getStringExtra("uno");     //获得当前用户的id
    type = intent.getIntExtra("type", -1);
    if(type == 0){          //好友列表
        baContacts = new BaseAdapter() {
            @Override
            public View getView(int position, View convertView, ViewGroup parent)
            {
                LinearLayout ll = new LinearLayout(ContactsActivity.this);      //创建线性布局 初始化linearlayout
                ll.setOrientation(LinearLayout.HORIZONTAL);
                ImageView iv = new ImageView(ContactsActivity.this);            //创建初始化ImageView对象
                iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
                iv.setImageBitmap(headList[position]);      //设置头像
                iv.setLayoutParams(new LinearLayout.LayoutParams(HEAD_WIDTH, HEAD_HEIGHT));
                //
                LinearLayout ll2 = new LinearLayout(ContactsActivity.this);     //创建子线性布局
                ll2.setOrientation(LinearLayout.VERTICAL);
                                             // 姓名
                TextView tvName = new TextView(ContactsActivity.this);          //创建用于显示姓名的TextView
                tvName.setText(infoList.get(position)[1]);                      //名字为数组的第   1   个元素, 设置TextView的内容
                tvName.setTextSize(20.5f);                                      //设置字体大小
                tvName.setTextColor(Color.BLUE);                                //设置字体颜色
                tvName.setPadding(5, 0, 0, 0);      //设置边界空白
                                             //病情
                TextView tvStatus = new TextView(ContactsActivity.this);    //创建用于显示心情的TextView
                tvStatus.setTextSize(18.0f);                                        //设置这字体大小
                tvStatus.setTextAppearance(ContactsActivity.this, R.style.content); //setTextAppearance()是改变TextView内文字样式的
                tvStatus.setPadding(5, 0, 0, 0);
                tvStatus.setText("状态:"+infoList.get(position)[2]);              //状态为数组的第   2   个元素,设置TextView内容
                ll2.addView(tvName);                                            //将显示姓名的TextView添加到线性布局
                ll2.addView(tvStatus);                                          //将显示病情的TextView添加到线性布局
                ll.addView(iv);                                                 //将显示头像的ImageView添加到现象布局
                ll.addView(ll2);
                return ll;
            }
            @Override
            public long getItemId(int position) {
                return 0;
            }
            @Override
            public Object getItem(int position) {
                return null;
            }
            @Override
            public int getCount() {
                return headList.length;
            }
        };
    }
    else if(type == 1){         //访客列表
        baContacts = new BaseAdapter() {
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                LinearLayout ll = new LinearLayout(ContactsActivity.this);      //创建线性布局
                ll.setOrientation(LinearLayout.HORIZONTAL);
                ImageView iv = new ImageView(ContactsActivity.this);            //创建ImageView对象
                iv.setScaleType(ImageView.ScaleType.FIT_CENTER);
                iv.setImageBitmap(headList[position]);      //设置头像
                iv.setLayoutParams(new LinearLayout.LayoutParams(100, 98));

                LinearLayout ll2 = new LinearLayout(ContactsActivity.this);     //创建子线性布局
                ll2.setOrientation(LinearLayout.VERTICAL);
                TextView tvName = new TextView(ContactsActivity.this);          //初始化创建用于显示姓名的TextView
                tvName.setText(infoList.get(position)[1]);                      //设置TextView的内容
                tvName.setTextSize(20.5f);                                      //设置字体大小
                tvName.setTextColor(Color.BLUE);                                //设置字体颜色
                tvName.setPadding(5, 0, 0, 0);                                  //设置边界空白
                TextView tvDate = new TextView(ContactsActivity.this);      //创建用于显示心情的TextView
                tvDate.setTextSize(18.0f);                                      //设置这字体大小
                tvDate.setTextAppearance(ContactsActivity.this, R.style.content);
                tvDate.setPadding(5, 0, 0, 0);
                tvDate.setText(infoList.get(position)[2]);              //设置TextView内容
                ll2.addView(tvName);                                            //将显示姓名的TextView添加到线性布局
                ll2.addView(tvDate);                                            //将显示心情的TextView添加到线性布局
                ll.addView(iv);                                                 //将显示头像的ImageView添加到现象布局
                ll.addView(ll2);
                return ll;
            }
            @Override
            public long getItemId(int position) {
                return 0;
            }
            @Override
            public Object getItem(int position) {
                return null;
            }
            @Override
            public int getCount() {
                return headList.length;
            }
        };
    }
    setContentView(R.layout.contacts); //设置当前屏幕
    lv = (ListView)findViewById(R.id.listFriend);       //获得ListView对象的引用
    getContact();
    lv.setOnItemClickListener(new OnItemClickListener()  // 添加监听
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,    //介绍 其中参数意义的链接  http://www.douban.com/note/227946703/
                long id) {               // 重写被单击事件的处理方法
            Intent intent = new Intent(ContactsActivity.this,HomePageActivity.class);
            intent.putExtra("uno", infoList.get(position)[0]); // 数组,第0 个元素;intent.putExtra用来传递参数
            intent.putExtra("visitor", uno);// ()里面分别 对应 键名 与键对应的值。  http://www.cnblogs.com/dchly/archive/2012/12/21/2828402.html
            startActivity(intent);
        }
    });
}
//方法:获取联系人列表
public void getContact(){
    new Thread(){
        public void run(){
            try{
                mc = new MyConnector(SERVER_ADDRESS, SERVER_PORT);  //创建MyConnector对象
                mc.dout.writeUTF(messageHead[type]+uno);        //向服务器发出请求
                int size = mc.din.readInt(); //读取列表的长度

                headList = null;
                infoList = null;
                headList = new Bitmap[size];//初始化好友头像列表
                // java.util.List<String> l=new java.util.ArrayList<String>();

                infoList = new ArrayList<String []>(size);      //初始化好友信息列表
                for(int i=0;i<size;i++){            //循环,获取每个好友的信息和头像
                    String fInfo = mc.din.readUTF();        //读取好友信息
                    String [] sa = fInfo.split("\|");      //分割字符串
                    infoList.add(sa);                       //将好友信息添加到相应的列表中
                    int headSize = mc.din.readInt();        //读取头像大小
                    byte[] buf = new byte[headSize];            //创建缓冲区
                    mc.din.read(buf);                       //读取头像信息
                    headList[i] = BitmapFactory.decodeByteArray(buf, 0, headSize);
                }
            }catch(Exception e){
                e.printStackTrace();
            }
            myHandler.sendEmptyMessage(0);
        }
    }.start();
时间: 2024-11-02 17:23:22

arraylist-数组越界的问题.求解决,下面会贴上原代码。 size部分搞不懂的相关文章

各位大神,传递图片问题,学长说是数组越界,不知道怎么解决

问题描述 各位大神,传递图片问题,学长说是数组越界,不知道怎么解决 图片传递代码图片接收代码 解决方案 不是内存溢出,而是有变量为null 解决方案二: 我觉得你的学长判断是错误的,因为错误消息已经写了:NullPointerException,这个异常消息的含义就是说有空对象调用了方法.所以不会是内存溢出(不完全排除,但可能性很小),而你所指出的那行代码上有一个空对象调用了方法. 我看过你的代码,你箭头所指向的代码一共有4个对象调用了方法,其中intent对象已经看到了你new的代码,所以它不

c语言-C语言求解决,问题描述和代码如下

问题描述 C语言求解决,问题描述和代码如下 在一个学生成绩管理系统中,保存学生个人的成绩情况,其中包括学号,姓名,性别,5门课成绩.对所有成绩作如下处理: (1)从键盘输入10个学生的学号,姓名,性别,5门课成绩,并计算出每个人平均成绩,全班每门课的平均成绩,将原有数据和计算出的平均分数存放在磁盘文件"stu.c"中. (2)将上题"stu.c"文件中的学生数据,按每个人的平均分进行排序处理,将已排序的学生数据存入一个新文件"stu-sort"中

网站被植入恶意代码,求解决

问题描述 网站被植入恶意代码,求解决 网站被植入恶意代码 <script type="text/javascript" id="clientjs" src="http://mobile.dingsite.com/theapi/getjs?id=3109374&type=30"></script> ,如何防止再次被植入呢 解决方案 如果是虚拟空间,去提供商的管理后台关闭所有文件的写入权限,如果没有这个功能,你只能找到

ExpandableListView动态刷新出现数组越界,求帮忙

问题描述 ExpandableListView动态刷新出现数组越界,求帮忙 childView是4个textView组成,GroupView就是一个textView. 本身是3个组,当刷新变成4个组时,出现数组越界 这行代码:info = map11.get(key).get(childPosition); 现在不知道怎么解决数组越界问题,listview的数组越界可以用list.clear()方法, 这个ExpandableListView是第一次用,知道的帮忙下,谢谢了.急用 部分代码如下:

textbox-C# 索引超出了数组界限 论坛找过了 没有找到答案 求解决!

问题描述 C# 索引超出了数组界限 论坛找过了 没有找到答案 求解决! if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { int i = 0; string Path = folderBrowserDialog1.SelectedPath; string[] filepath = System.IO.Directory.GetFiles(Path); string[] filename = new string[1000];

struct-是数组越界了吗?怎么解决

问题描述 是数组越界了吗?怎么解决 //定义结构体//struct achievement{ int number; char name[20]; char sex; int achievement1achievement2achievement3;} tab_achievement[n]; void line3(){ int j[10]i; int k; for(i=0; i<n; i++) j[i]=0; for(i=0; i<n; i++){ k=tab_achievement[i].a

c语言-谁来帮我看看这代码哪里错了,只是简单的C程序(折半搜索+快速排序),题库上说我数组越界?求帮忙看看

问题描述 谁来帮我看看这代码哪里错了,只是简单的C程序(折半搜索+快速排序),题库上说我数组越界?求帮忙看看 #include #define MAXN 500+10 int n,m; long int a[MAXN],b[MAXN],c[MAXN],d[MAXN],cd[MAXN*MAXN]; void sort(long int a[],int xx,int yy) { if(xx>=yy)return; int x=xx,y=yy,k=a[xx]; while(x { while(a[y]

使用poi导出excel时碰到hyperLink连接过长时数组越界,求解答

问题描述 packagecom.test;importjava.io.File;importjava.io.FileOutputStream;importcom.test.lib.*;publicclassTestPoi{publicstaticvoidmain(String[]args){try{HSSFWorkbookwb=newHSSFWorkbook();HSSFSheetsheet=wb.createSheet("testPoi");wb.setSheetName(0,&qu

java-JAVA连位数字判断如,1234 ,7890,8901,9012求解决

问题描述 JAVA连位数字判断如,1234 ,7890,8901,9012求解决 如题,求高手解答在线等,我现在只实现了,1234这种的不能实现8901这种的,public static boolean isDescNumeric(String numOrStr) { boolean flag = true; for (int i = 0; i < numOrStr.length(); i++) { if (i > 0) { int num = Integer.parseInt(numOrSt