Merhabalar. Aşağıdaki kod blogunda, Baseadapter'a e içinde Categoryicerikler nesnesi bulunduran bir liste kullanıyorum.

Categoryicerikler nesnesi içersinde resim linkleri var ve resimleri indirmek için tekrardan bir thread açıp onun içinde resimlerimi indiriyorum.

İndirilern resimleri Bitmap barındıran bir liste içine yerleştiriyorum. Ancak resim sırası karman çorman geliyor. bitmaplist listesi içine hata ayıkladığımda nedense ilk yolladığım resmi değilde 2. veya 3. resmi filan koymuş oluyor. Bunun sebebbi nedir acaba bir türlü anlayamadım.

Yardımlarınız için teşekkürler.

package com.medyasef.dernek.tjod;

import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.http.AndroidHttpClient; import android.os.AsyncTask; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView;

import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.methods.HttpGet;

import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List;

/* * Created by olkunmustafa on 26.09.2013. / public class CategoryAdapter extends BaseAdapter { private String LOG_NAME = "HATA"; private List<categoryicerikler> list_view; private List<bitmap> bitmaplist; private Context mContext; private Categories categories = new Categories();

public CategoryAdapter(List<Categoryicerikler> list_view, Context mContext) {
    this.list_view = list_view;
    this.mContext = mContext;
    bitmaplist = new ArrayList<Bitmap>();

    for (int i = 0; i < list_view.size() ; i++) {
        Categoryicerikler bitmap_icerikler = list_view.get(i);
        setBitmapFromURL(bitmap_icerikler.getCategory_post_image());
    }
}
/*
Burada resimleri çekmek için thread oluşturuyoruz.
Resim linkini ve ImageView'i veriyoruz ve ekrana basmasını sağlıyoruz.
 */
public void setBitmapFromURL(final String src) {
    new Thread(
            new Runnable()
            {
                @Override
                public void run() {
                    HttpURLConnection connection= null;
                    try {
                        URL url = new URL(src);
                        Log.d(LOG_NAME,src);
                        connection = (HttpURLConnection) url.openConnection();
                        connection.setRequestMethod("GET");
                        connection.setDoInput(true);
                        connection.setDoOutput(true);
                        connection.connect();
                        InputStream input = connection.getInputStream();

                        final Bitmap myBitmap = BitmapFactory.decodeStream(input);
                        try {
                            bitmaplist.add(myBitmap);
                        }
                        catch (Exception e){
                            Log.d(LOG_NAME,e.getMessage());
                            Log.d(LOG_NAME,"Resim ekleme işlemi başarısız.");
                        }

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    finally {
                        connection.disconnect();
                    }
                }
            }).start();
}

@Override
public int getCount() {
    return list_view.size();
}

@Override
public Object getItem(int position) {
    return list_view.get(position);
}

@Override
public long getItemId(int position) {
    return list_view.indexOf(getItem(position));
}

@Override
public View getView(int position, View convertview, ViewGroup viewGroup) {
    Categoryicerikler categoryicerikler = list_view.get(position);
    ViewHolder holder = null;

    if(convertview==null){
        Log.d(LOG_NAME,"sonuc");
        convertview = LayoutInflater.from(mContext).inflate(R.layout.categories,viewGroup,false);
        holder = new ViewHolder();
        holder.txtTitle = (TextView) convertview.findViewById(R.id.category_posttitle);
        holder.txtDate  = (TextView) convertview.findViewById(R.id.category_postdate);
        holder.imageView  = (ImageView) convertview.findViewById(R.id.category_image);
        convertview.setTag(holder);
    }
    else {
        holder = (ViewHolder) convertview.getTag();
    }

    holder.txtTitle.setText(categoryicerikler.getCategory_posttitle());
    holder.txtDate.setText(categoryicerikler.getCategory_postdate());
    try {
    holder.imageView.setImageBitmap(bitmaplist.get(position));
    }
    catch (Exception e){

    }

    return convertview;
}

/*private view holder class*/
private class ViewHolder {
    ImageView imageView;
    TextView txtTitle;
    TextView txtDate;
}

}

soruldu: 30 Eyl '13, 09:50

olkunmustafa's gravatar image

olkunmustafa
582222934
cevap kabul oranı: 26%


Sorunumu Arraylist yerine Hashmap Kullanarak çözdüm arkadaşlar. Kodun son hali aşağıdaki gibidir.

package com.medyasef.dernek.tjod;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.http.AndroidHttpClient;
import android.os.AsyncTask;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * Created by olkunmustafa on 26.09.2013.
 */
public class CategoryAdapter extends BaseAdapter {
    private String LOG_NAME = "HATA";
    private List<Categoryicerikler> list_view;
    private HashMap<Integer,Bitmap> bitmaplist;
    private Context mContext;
    private Categories categories = new Categories();

    public CategoryAdapter(List<Categoryicerikler> list_view, Context mContext) {
        this.list_view = list_view;
        this.mContext = mContext;
        bitmaplist = new HashMap<Integer, Bitmap>();

        for (int i = 0; i < list_view.size() ; i++) {
            Categoryicerikler bitmap_icerikler = list_view.get(i);
            setBitmapFromURL(bitmap_icerikler.getCategory_post_image(),i);
        }
    }
    /*
    Burada resimleri çekmek için thread oluşturuyoruz.
    Resim linkini ve ImageView'i veriyoruz ve ekrana basmasını sağlıyoruz.
     */
    public void setBitmapFromURL(final String src,final int value) {
        new Thread(
                new Runnable()
                {
                    @Override
                    public void run() {
                        HttpURLConnection connection= null;
                        try {
                            URL url = new URL(src);
                            connection = (HttpURLConnection) url.openConnection();
                            connection.setRequestMethod("GET");
                            connection.setDoInput(true);
                            connection.setDoOutput(true);
                            connection.connect();
                            InputStream input = connection.getInputStream();
                            final Bitmap myBitmap = BitmapFactory.decodeStream(input);
                            try {
                                bitmaplist.put(value,myBitmap);
                            }
                            catch (Exception e){
                                Log.d(LOG_NAME,e.getMessage());
                                Log.d(LOG_NAME,"Resim ekleme işlemi başarısız.");
                            }

                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        finally {
                            connection.disconnect();
                        }
                    }
                }).start();
    }

    @Override
    public int getCount() {
        return list_view.size();
    }

    @Override
    public Object getItem(int position) {
        return list_view.get(position);
    }

    @Override
    public long getItemId(int position) {
        return list_view.indexOf(getItem(position));
    }

    @Override
    public View getView(int position, View convertview, ViewGroup viewGroup) {
        Categoryicerikler categoryicerikler = list_view.get(position);
        ViewHolder holder = null;

        if(convertview==null){
            Log.d(LOG_NAME,"sonuc");
            convertview = LayoutInflater.from(mContext).inflate(R.layout.categories,viewGroup,false);
            holder = new ViewHolder();
            holder.txtTitle = (TextView) convertview.findViewById(R.id.category_posttitle);
            holder.txtDate  = (TextView) convertview.findViewById(R.id.category_postdate);
            holder.imageView  = (ImageView) convertview.findViewById(R.id.category_image);
            convertview.setTag(holder);
        }
        else {
            holder = (ViewHolder) convertview.getTag();
        }

        holder.txtTitle.setText(categoryicerikler.getCategory_posttitle());
        holder.txtDate.setText(categoryicerikler.getCategory_postdate());
        try {
        holder.imageView.setImageBitmap(bitmaplist.get(position));
        }
        catch (Exception e){

        }

        return convertview;
    }

    /*private view holder class*/
    private class ViewHolder {
        ImageView imageView;
        TextView txtTitle;
        TextView txtDate;
    }
}
permanent link

cevaplandı: 30 Eyl '13, 12:25

olkunmustafa's gravatar image

olkunmustafa
582222934
cevap kabul oranı: 26%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×819
×31
×10

Soruldu: 30 Eyl '13, 09:50

Görüntüleme: 667 kez

Son güncelleme: 30 Eyl '13, 12:25

powered by BitNami OSQA