android-Arrayindexoutofboundsexception 异常

问题描述

Arrayindexoutofboundsexception 异常
这个问题是关于android中customListview 的。我想使用onclick事件(tv.setOnClickListener)在list中动态的添加内容。我有自定义的country类使用geter and seter 方法来储存数据。当我动态的添加新的内容,然后滚动到list的底部时,获取 Arrayindexoutofboundexception 异常。

public class PosterList extends Activity    { MyCustomAdapter dataAdapter = null;ArrayList<Country> countryList = new ArrayList<Country>();TextView tv;@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.posterlist);            //Click on textview to add element in contrylist    tv = (TextView) findViewById(R.id.myFilter);    tv.setOnClickListener(new View.OnClickListener()     {            public void onClick(View v)             {                Country country = new Country(""df""df""df""m"");                countryList.add(country);                      dataAdapter.notifyDataSetChanged();            }    });    displayListView();}private void displayListView() {            //Parse my JSON and store it in to different arrays    for(int k=0;k<len;k++)    {        Country country = new Country(subcategory[k]caseid[k]time[k]newpost[k]);        countryList.add(country);    }    dataAdapter = new MyCustomAdapter(thisR.layout.country_info countryList);    ListView listView = (ListView) findViewById(R.id.listView1);    listView.setAdapter(dataAdapter);    listView.setOnItemClickListener(new OnItemClickListener()    {        public void onItemClick(AdapterView<?> parent View view            int position long id)         {                Country country = (Country) parent.getItemAtPosition(position);                Toast.makeText(getApplicationContext()                country.getContinent() Toast.LENGTH_SHORT).show();        }    });}private class MyCustomAdapter extends ArrayAdapter<Country> {    private ArrayList<Country> originalList;    private ArrayList<Country> countryList;    public MyCustomAdapter(Context context int textViewResourceId         ArrayList<Country> countryList) {    super(context textViewResourceId countryList);    this.countryList = new ArrayList<Country>();    this.countryList.addAll(countryList);    this.originalList = new ArrayList<Country>();    this.originalList.addAll(countryList);}private class ViewHolder {    TextView code;    TextView name;    TextView continent;    TextView region; }@Overridepublic View getView(int position View convertView ViewGroup parent) {    ViewHolder holder = null;    Log.v(""ConvertView"" String.valueOf(position));    if (convertView == null)     {        LayoutInflater vi = (LayoutInflater)getSystemService(            Context.LAYOUT_INFLATER_SERVICE);        convertView = vi.inflate(R.layout.country_info null);        holder = new ViewHolder();        holder.code = (TextView) convertView.findViewById(R.id.code);        holder.name = (TextView) convertView.findViewById(R.id.name);        holder.continent = (TextView) convertView.findViewById(R.id.continent);        holder.region = (TextView) convertView.findViewById(R.id.region);        convertView.setTag(holder);    }     else     {            holder = (ViewHolder) convertView.getTag();     }    Country country = countryList.get(position);    holder.code.setText(country.getCode());    holder.name.setText(country.getName());    holder.continent.setText(country.getContinent());    holder.region.setText(country.getRegion());    return convertView;  }   }}

解决方案

在你的 getView 方法中,你提到 countryList,有两个 countryList 变量:一个是在 PostList 类中,一个是在 MyCustomAdapter 类中。你提及到的那个是在 MyCustomerAdapter 类中,没有适配器支持数据。在 getView 方法获取 Country 对象:

Country country = (Country) getItem(position);

解决方案二:

            holder = (ViewHolder) convertView.getTag();     }    Country country = countryList.get(position);    holder.code.setText(country.getCode());    holder.name.setText(country.getName());    holder.continent.setText(country.getContinent());    holder.region.setText(country.getRegion());    return convertView;  }   }}

android

解决方案三:

if(position <=   countryList.size()){   Country country = countryList.get(position);        holder.code.setText(country.getCode());        holder.name.setText(country.getName());        holder.continent.setText(country.getContinent());        holder.region.setText(country.getRegion());        return convertView;}return null ;
时间: 2025-01-17 15:21:00

android-Arrayindexoutofboundsexception 异常的相关文章

Android崩溃异常捕获方法

开发中最让人头疼的是应用突然爆炸,然后跳回到桌面.而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里.但平时使用的时候给你闹崩溃,那你就欲哭无泪了. 那么今天主要讲一下如何去捕捉系统出现的Unchecked异常.何为Unchecked异常呢,换句话说就是指非受检异常,它不能用try-catch来显示捕捉. 我们先从Exception讲起.Exception分为两类:一种是CheckedException,一种是UncheckedException

详解Android全局异常的捕获处理_Android

在Android开发中在所难免的会出现程序crash,俗称崩溃.用户的随意性访问出现测试时未知的Bug导致我们的程序crash,此时我们是无法直接获取的错误log的,也就无法修复Bug.这就会极大的影响用户体验,此时我们需要注册一个功能来捕获全局的异常信息,当程序出现crash信息,我们把错误log记录下来,上传到服务器,以便于我们能及时修复bug.实现这个功能我们需要依赖于UncaughtExceptionHandler这个类,UncaughtExceptionHandler是一个接口,在Th

详解Android全局异常的捕获处理

在Android开发中在所难免的会出现程序crash,俗称崩溃.用户的随意性访问出现测试时未知的Bug导致我们的程序crash,此时我们是无法直接获取的错误log的,也就无法修复Bug.这就会极大的影响用户体验,此时我们需要注册一个功能来捕获全局的异常信息,当程序出现crash信息,我们把错误log记录下来,上传到服务器,以便于我们能及时修复bug.实现这个功能我们需要依赖于UncaughtExceptionHandler这个类,UncaughtExceptionHandler是一个接口,在Th

Android 全局异常捕获实例详解

Android 全局异常捕获 今天就来说说作为程序猿的我们每天都会遇到的东西bug,出bug不可怕可怕的是没有出bug时的堆栈信息,那么对于bug的信息收集就显得尤为重要了,一般用第三方bugly或者友盟等等都能轻易收集,但是由于公司不让使用第三方,而安卓正好有原生的异常收集类UncaughtExceptionHandler,那么今天博客就从这个类开始. UncaughtExceptionHandler见名知意,即他是处理我们未捕获的异常,具体使用分两步 1.实现我们自己的异常处理类 publi

Android实现异常记录并重启程序

异常捕获主要是在全局的Application中来处理的,Android提供了一个CrashHandler用来进行错误处理. intent添加 "Intent.FLAG_ACTIVITY_NEW_TASK" 标记的原因是--Content的startActivity方法,需要开启一个新的task.如果使用 Activity的startActivity方法,不会有任何限制,因为Activity继承自Context,重载了startActivity方法.所以如果是context启动Activ

android 全局异常的捕获,保存本地以及上传服务器

android在产品上线以后为了能够实时捕获异常,需要写一个异常捕获的类,这个类在你遇到异常的时候会执行uncaughtException这个方法,然后你就可以对异常进行一些操作. 我把代码贴上来: package com.example.spanable_textview; import java.io.File; import java.io.FileOutputStream; import java.lang.Thread.UncaughtExceptionHandler; import

[置顶] 我的Android进阶之旅------&amp;gt;Android解决异常: startRecording() called on an uninitialized AudioRecord.

今天使用AudioRecord进行录音操作时候,报了下面的异常. E/AndroidRuntime(22775): java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord. E/ ( 357): Request requires android.permission.RECORD_AUDIO E/AudioFlinger( 357): openRecord() permiss

android 捕捉异常并上传至服务器的简单实现

在项目中,我们的应用经常会遇到崩溃的情况,如果你的项目已经发送到了应用市场上,那么应用发生的崩溃开发人员是开不到的,所以我们要想办法将异常信息传到服务器上,便于开发人员查看并作出修改.Google考虑到这一点,也提供了Thread.UncaughtExceptionHandler接口来实现这一问题. 创建Crash异常捕获很简单,主要的步骤有: 1.创建BaseApplication继承Application并实现Thread.UncaughtExceptionHandler 2.通过Threa

详解Android中处理崩溃异常_Android

大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了崩溃现象,开发者应该及时获取在该设备上导致崩溃的信息,这对于下一个版本的bug修复帮助极大,所以今天就来介绍一下如何在程序崩溃的情况下收集相关的设备参数信息和具体的异常信息,并发送这些信息到服务器供开发者分析和调试程序. 我们先建立一个crash项目,项目结构如图: 在MainActivity.ja

Android ListView出现异常解决办法_Android

Android ListView 异常解决办法: ListView:The content of the adapter has changed but ListView did not receive a notification使用ListView时遇到如下的异常信息: 10-26 18:30:45.085: E/AndroidRuntime(7323): java.lang.IllegalStateException: The content of the adapter has chan