Merhabalar arkadaşlar.

Base adapter ile internetten resimleri çekip uygulamaya koyma günümün 4. günündeyim. Epey zormuş doğrusu bu kadar beklemiyordum. Neyse soruma geleyim.

İnternete normal şekilde bağlanıp veriyi çekiyorum. Ardından json dizisi içinde resim linki taşıyan Json nesnelerini thread içinde çalıştırıyorum.

Resimleri bir hashmap içinde topluyorum ve base adapterde sırası ile bastırıyorum ama resimler yazılardan sonra geldiği için adapteri yenilemem gerekiyor ancak .notifyDataSetChanged(); metodunu nerede kulanıp adapteri yenilemem gerektiğini çözemiyorum. Lütfen yardım

Aşağıdaki resimlerle de anlatmaya çalıştım.

Bu uygulama ilk açıldığı anda

alt text

Bu resimde bir row sonra.

alt text

Categories.java

package com.medyasef.dernek.tjod;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.text.Html;
import android.util.Log;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import org.json.JSONException;

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

/**
 * Created by olkunmustafa on 25.09.2013.
 */
public class Categories extends Activity {
    private List<Categoryicerikler> content_list;
    public static CategoryAdapter categoryAdapter;
    private ListView main_category;
    private static HashMap<Integer,Bitmap> bitmaplist;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_categories);
        main_category = (ListView) findViewById(R.id.main_category);
        new GetCategory().execute();
    }

    private class GetCategory extends AsyncTask<Void,Void,String> {

        @Override
        protected void onPreExecute() {
            Toast.makeText(Categories.this, "İslem Baslıyor Bekleyiniz", Toast.LENGTH_SHORT).show();
        }

        @Override
        protected String doInBackground(Void... voids) {
            /*
            Burada internete bağlanıp json veriyi string cinsinden çekiyoruz.
             */
            InternetConnection internetcon = new InternetConnection();
            String json_result = internetcon.get_json_data();
            return json_result;
        }

        @Override
        protected void onPostExecute(String data) {
            /*
            Gelen string veriyi json_to_list_view metoduna veriyorum
            Bu metot gelen json verisinin içeriklerini doldurarak bana birt liste dönderir.
             */
            try {
                content_list = GetJson.json_to_list_view(data);
            } catch (JSONException e) {
                Log.d("Json_Error","Json çekilirken hata oluştu");
            }
            categoryAdapter = new CategoryAdapter(content_list,Categories.this);
            main_category.setAdapter(categoryAdapter);
        }
    }
}

CategoryAdapter.java

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);
            Categories.categoryAdapter.notifyDataSetChanged();
        }
        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, 12:49

olkunmustafa's gravatar image

olkunmustafa
582222934
cevap kabul oranı: 26%

değiştirildi: 02 Eki '13, 06:38

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

@olkunmustafa Lütfen soru basliklarini soru formatinda yaziniz!

BTSoru kullanim kilavuzu: http://www.btsoru.com/questions/1339/btsorucom-kullanm-klavuzu

BTSoru Sunumu: Nasil soru sormaliyim? http://www.btsoru.com/about/

(30 Eyl '13, 16:43) CemIkta ♦ CemIkta's gravatar image

Sorunumu picasso adinda bir kutuphane kullanarak cozdum. Gayette gusel oldu. Ayrinti isteyen olursa verebilirim.

permanent link

cevaplandı: 01 Eki '13, 14:45

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
×39

Soruldu: 30 Eyl '13, 12:49

Görüntüleme: 1,148 kez

Son güncelleme: 02 Eki '13, 06:38

powered by BitNami OSQA