android - 如何解决数组越界异常?

标签 android

这是我的代码,我得到数组超出绑定(bind)的异常。我如何解决这个错误?我使用 Bitmap 对象而不是字符串。当我将位图图像存储到数组列表时,我遇到了这个错误。

主 Activity .java

public class MainActivity extends Activity {
    ListView lv;
    Context context;

    ArrayList prgmName;
    Bitmap bitmap;
    //bitmap=getBitmapFromUrl("http://content6.flixster.com/movie/11/17/75/11177548_pro.jpg");

    public static String [] prgmNameList={"Let Us C","c++","JAVA","Jsp","Microsoft .Net","Android","PHP","Jquery","JavaScript"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bitmap=getBitmapFromUrl("http://content6.flixster.com/movie/11/17/75/11177548_pro.jpg");
        context=this;
        Bitmap  [] prgmImages ={bitmap,bitmap};
        lv=(ListView) findViewById(R.id.listView);
        lv.setAdapter(new CustomAdapter(this, prgmNameList,prgmImages));

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    private Bitmap getBitmapFromUrl(String src) {
        // TODO Auto-generated method stub
        try {

            URL url =new URL(src);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input=connection.getInputStream();
            Bitmap mybiBitmap=BitmapFactory.decodeStream(input);
            return mybiBitmap;


         } catch (Exception e) {
            // TODO: handle exception
           e.printStackTrace();
           return null;
         }


    }

}

客户适配器.java

public class CustomAdapter extends BaseAdapter{
    String [] result;
    Context context;
 Bitmap[] imageId;
      private static LayoutInflater inflater=null;
    public CustomAdapter(MainActivity mainActivity, String[] prgmNameList, Bitmap[] prgmImages) {
        // TODO Auto-generated constructor stub
        result=prgmNameList;
        context=mainActivity;
        imageId=prgmImages;
         inflater = ( LayoutInflater )context.
                 getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return result.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public class Holder
    {
        TextView tv;
        ImageView img;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        Holder holder=new Holder();
        View rowView;        
             rowView = inflater.inflate(R.layout.list_item, null);
             holder.tv=(TextView) rowView.findViewById(R.id.textView1);
             holder.img=(ImageView) rowView.findViewById(R.id.imageView1);       
         holder.tv.setText(result[position]);
         holder.img.setImageBitmap(imageId[position]);         
         rowView.setOnClickListener(new OnClickListener() {         
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(context, "You Clicked "+result[position], Toast.LENGTH_LONG).show();
            }
        });  
        return rowView;
    }

}

最佳答案

您得到 ArrayIndexOutOfBound 是因为 imageId 的数组大小与 result 不同。

你可以看到你的 result 数组有 9 个元素而 imageId 只有 2 个元素,而且两个元素是相同的,那么为什么你使用数组,只是传递简单的位图数组。

你的结果数组:

 public static String [] prgmNameList={"Let Us C","c++","JAVA","Jsp","Microsoft .Net","Android","PHP","Jquery","JavaScript"};

您的 imageId 数组:

 Bitmap  [] prgmImages ={bitmap,bitmap};

解决方案:

1) 如果您想为行项目显示不同的图像,则传递相同大小的 imageId 数组 结果数组。 2) 如果你想在所有行项目中显示相同的图像,那么只传递单个位图而不是数组。

关于android - 如何解决数组越界异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24445638/

相关文章:

java - 如何使用 Volley 进行并发 GET 调用?

android - API 26 上的 SYSTEM_ALERT_WINDOW PERMISSION 未按预期工作。窗口类型 2002 的权限被拒绝

android - 数据绑定(bind) : Pass resource id to custom view string attribute?

android - Android 作业计划程序中的定期作业未按预期工作

java - tabIndicator 显示不正确(它以相反的方式显示)

android - FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 排除整个应用程序,而不仅仅是 Activity

java - 有什么想法为什么录制音频会这么慢我的整个应用程序?

android - 从数据库中检索数据时显示空指针异常

android - Jetpack 撰写 : Update composable when list changes

java - Android:需要格式化布局的帮助