Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用QuickReturn的自定义适配器中出现ArrayList索引越界异常_Android - Fatal编程技术网

Android 使用QuickReturn的自定义适配器中出现ArrayList索引越界异常

Android 使用QuickReturn的自定义适配器中出现ArrayList索引越界异常,android,Android,首先,我有一个可以正常工作的自定义适配器。然后我为我的listview实现quickreturn。现在适配器类给了我一个越界异常。我尝试更改getCount返回值,但仍然出现错误 我的适配器类: public class KanalAdapter extends BaseAdapter { Context context; String charset; String query; String kanaladi; String veritabani_id; ArrayList<Offi

首先,我有一个可以正常工作的自定义适配器。然后我为我的listview实现quickreturn。现在适配器类给了我一个越界异常。我尝试更改getCount返回值,但仍然出现错误

我的适配器类:

public class KanalAdapter extends BaseAdapter {

Context context;
String charset;
String query;
String kanaladi;
String veritabani_id;
ArrayList<OfficialKanal> officialKanals;
ArrayList<NormalKanal> normalKanals;
ArrayList<Object> kanallar = new ArrayList();
ArrayList<Kanal> channelbaba;
int OFFICIAL_KANAL = 0;
int NORMAL_KANAL= 1;
LayoutInflater lala;
KanalaElemanEkle kEE;
public KanalAdapter(Context context , ArrayList<OfficialKanal> officiallar , ArrayList<NormalKanal> normaller
        , ArrayList<Kanal> channelbaba){
    this.context = context;
    officialKanals = officiallar;
    normalKanals = normaller;
    this.channelbaba = channelbaba;

    for(int i = 0 ; i < officiallar.size() ; i++){
        kanallar.add(officiallar.get(i));
    }
    for(int i = 0 ; i < normaller.size() ; i++){
        kanallar.add(normaller.get(i));
    }
    Log.i("tago" , "tagtag");
    veritabani_id = SharedIdCek();
    lala = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

private String SharedIdCek() {
    SharedPreferences sp = context.getSharedPreferences("kullaniciverileri", Context.MODE_PRIVATE);
    String veritabani_id = sp.getString("veritabani_id", "default id");
    return veritabani_id;
}

public int getCount() {
    Log.i("tago" , "getCount ="+(channelbaba.size()+1));
    return (channelbaba.size()+1);
}

public Object getItem(int i) {
    Log.i("tago" , "getItem = " + channelbaba.get(i));
    return channelbaba.get(i);
}

public long getItemId(int i) {
    Log.i("tago" , "getItemId =" + i);
    return i;
}

public int getItemViewType(int position) {
    Object item = getItem(position);
    Kanal kanal = (Kanal)item;
    if(kanal.official){
        return OFFICIAL_KANAL;
    }else if(!kanal.official){
        return NORMAL_KANAL;
    }
    return -1;
}

public int getViewTypeCount() {
    return 2;
}

public View getView(int position, View convertView, ViewGroup viewGroup) {
    KanalHolder holder = null;
    final int pozisyon = position;
    Object currentKanal = getItem(position);
    Kanal kanal = (Kanal) currentKanal;
    if(convertView==null) {
        holder = new KanalHolder();
        if (kanal.official) {
            convertView = lala.inflate(R.layout.officialkanal, null);
            holder.image2 = (ImageView) convertView.findViewById(R.id.imageView5);
            holder.tv3 = (TextView) convertView.findViewById(R.id.textView4);
            holder.tv4 = (TextView) convertView.findViewById(R.id.textView8);
            holder.buton1 = (ImageButton) convertView.findViewById(R.id.button7);
            holder.buton2 = (ImageButton) convertView.findViewById(R.id.button8);
            holder.buton3 = (ImageButton) convertView.findViewById(R.id.imageButton7);
            Log.i("tago", "tagtagatagtagtagatg");
        }
        if (!kanal.official) {
            convertView = lala.inflate(R.layout.normalkanal, null);
            holder.image1 = (ImageView) convertView.findViewById(R.id.imageView5);
            holder.tv1 = (TextView) convertView.findViewById(R.id.textView4);
            holder.tv2 = (TextView) convertView.findViewById(R.id.textView8);
            Log.i("tago", "tagtagtag");
        }

        convertView.setTag(holder);
    }else{
        holder = (KanalHolder)convertView.getTag();
    }
        if(kanal.official){
            Drawable a = ContextCompat.getDrawable(context , R.drawable.taylanprof);
            holder.image2.setBackground(a);
            holder.tv3.setText(channelbaba.get(position).getKanaladi());
            holder.image2.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    kEE = new KanalaElemanEkle();
                    kEE.execute(kanaladi);
                    Intent intent = new Intent(context , GrupSohbeti.class);
                    context.startActivity(intent);
                }
            });
        }
        if(!kanal.official){
            holder.image1.setImageResource(R.mipmap.apoprof);
            holder.tv1.setText(channelbaba.get(position).getKanaladi());
            holder.image1.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    kanaladi = channelbaba.get(pozisyon).getKanaladi();
                    Log.i("tago" , kanaladi);
                    kEE = new KanalaElemanEkle();
                    kEE.execute(kanaladi);
                    Intent intent = new Intent(context , GrupSohbeti.class);
                    intent.putExtra("kanaladi" , kanaladi);
                    context.startActivity(intent);
                }
            });
        }
    return convertView;
}

static class KanalHolder{
    public ImageView image1,image2;
    public TextView tv1 , tv2,tv3,tv4;
    public ImageButton buton1,buton2,buton3;
}

private class KanalaElemanEkle extends AsyncTask<String,Void,String>{
    protected String doInBackground(String... params) {
        charset = "utf-8";
        String param1 = "id";
        String param2 = "name";
        try {
            query = String.format("param1=%s&param2=%s", URLEncoder.encode(param1, charset), URLEncoder.encode(param2, charset));
        } catch (IOException e) {
            e.printStackTrace();
        }
        Log.i("tago", "KanalAdapter kanala eleman ekleme ba�lat�ld�");
        try {
            return kanaliekle(params[0]);
        } catch (Exception e) {
            e.printStackTrace();
            return "olmadi";
        }
    }

    private String kanaliekle(String kanaladi) {
        HttpURLConnection sconnection = null;
        try {
            sconnection = (HttpURLConnection) new URL("http://www.ceng.metu.edu.tr/~e1818871/shappy/join_us.php?id=" + veritabani_id + "&name=" + kanaladi).openConnection();
            Log.i("tago", "Page Fragment1 yeni kanal kur bagı kuruldu");
        } catch (IOException e) {
            e.printStackTrace();
        }
        sconnection.setDoOutput(true);
        sconnection.setDoInput(true);
        sconnection.setRequestProperty("User-Agent", "Mozilla/5.0 ( compatible ) ");
        sconnection.setRequestProperty("Accept", "* /*");
        sconnection.setRequestProperty("Accept-Charset", charset);
        sconnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset);

        try {
            OutputStream output = new BufferedOutputStream(sconnection.getOutputStream());
            output.write(query.getBytes(charset));
            output.close();
            int a = sconnection.getResponseCode();
            String b = sconnection.getResponseMessage();
            Log.i("tago", "rerere" + a + " " + b);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "alabama";
    }
}
 }
我怎样才能解决这个问题

public int getCount() {
 Log.i("tago" , "getCount ="+(channelbaba.size()+1)); 
return (channelbaba.size()+1); 
}
尝试重新键入
kanal.size()
如果kanal和channelbaba的大小相同,请尝试删除+1

尝试重新键入
kanal.size()

或者,如果kanal和channelbaba的大小相同,请尝试删除+1,或者可能的原因是什么?或者可能的原因是什么?错误显示为getview工作了7次,但您的arraylist大小只有6次是的,我知道,但getview必须工作6次。在实现时,它会改变。通过记录来检查channelbaba.size()。基于getCount()getview正在迭代,getCount()返回的值用于迭代错误显示为getview工作了7次,但您的arraylist大小只有6是的,我知道,但getview必须工作6次。在实现时,它会改变。通过记录来检查channelbaba.size()。基于getCount(),getview正在迭代,getCount()返回的值用于迭代
public int getCount() {
 Log.i("tago" , "getCount ="+(channelbaba.size()+1)); 
return (channelbaba.size()+1); 
}