우선 첨부한 이미지를 보시면

맨처음에는 타이틀과 기본 아이콘으로

화면이 출력되고

그후에 하나씩 아이콘들을 받아와서 출력 해주고

마지막에는 화면에 전부 표시된 것입니다

저럭식으로 구현을 하려고 하는데

지금은 pullparser을 사용 web에서 이미지 검색을 하여

받아서 뿌려주는 방식인데 저런식으로 뿌려줄려면 어찌해야할까요??

방향을 제시 해주세요

지금 저번주 월욜부터 계속 고민 중인데 찾아봐도 감을 못잡겠습니다

따로 받아와서 DB에저장후 뿌려줘야 하는건지

아니면  AsyncTask를 쓰지말고 Thread를 여러개 써서 받아야하는건지..

어디서 들은 바로는 Httpdownload를 걸어준다는거 같은데 잘모르겠네요 

현재 방식 소스도 같이 올렸습니다 밑에..

1.png 2.png
3.png

package com.xmlparser;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.ArrayList;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AbsListView.OnScrollListener;

public class XmlParser extends ListActivity {
 private int listNumber = 10;
 private ArrayList<XmlData> m_xmlData;
 private String m_sConnectUrl;
 private String sTag;
 private XmlData xmlData = null;
 private XmlListAdapter adapter;
 private ListView listView;
 private TextView tv;
 private EditText et;
 private boolean popAlert=false;
 private Thread t1;
 private Thread t2;
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  listNumber = 10;
  Button searchBtn = (Button) findViewById(R.id.searchBtn);
  et = (EditText) findViewById(R.id.searchTxt);
  tv = (TextView) findViewById(R.id.title);

  listView = (ListView) this.getListView();

  listView.setOnScrollListener(new OnScrollListener() {

   public void onScrollStateChanged(AbsListView view, int scrollState) {
    // TODO Auto-generated method stub

   }

   public void onScroll(AbsListView view, int firstVisibleItem,
     int visibleItemCount, int totalItemCount) {
    System.out.println("f : " + firstVisibleItem + " vc : "
      + visibleItemCount + " tc : " + totalItemCount);
    if ((firstVisibleItem + visibleItemCount) == totalItemCount) {
     listNumber += 10;
     listAdd();
    }

   }
  });

  // 버튼 클릭시 xml을 읽기위한 함수 호출
  searchBtn.setOnClickListener(new View.OnClickListener() {

   public void onClick(View v) {
    final String searhTxt = et.getText().toString();
    
    if (searhTxt == "") {

    } else {
     new GrabURL(searhTxt).execute(searhTxt);
    }
   }

  });

 }

 // XmlPullParser를 이용 xml을 읽는다.
 public ArrayList<XmlData> searchXml(String searchTxt) {
  String m_searchTxt = "";
  try {
   
   // m_searchTxt = URLEncoder.encode(searchTxt,"EUC-KR");
   m_searchTxt = URLEncoder.encode(searchTxt);
   
  } catch (Exception e1) {
   e1.printStackTrace();
  }
  // String m_sConnectUrl =
  // "http://newssearch.naver.com/search.naver?where=rss&query="+m_searchTxt+"&st=news.all&q_enc=EUC-KR&r_enc=UTF-8&r_format=xml&rp=none&sm=all.basic&ic=all&so=rel.dsc&detail=0&pd=1&start=1&display=20";
  m_sConnectUrl = "http://openapi.naver.com/search?key=29b0a07ddfe7502eb2d0c585cd448a32&query="
    + m_searchTxt + "&target=image&start=1&display=" + listNumber;
  
  System.out.println("m_searchTxt : "+m_searchTxt);
  System.out.println("listNumber : "+listNumber);
  m_xmlData = new ArrayList<XmlData>();

  try {
   XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
   factory.setNamespaceAware(true);
   XmlPullParser xpp = factory.newPullParser();

   URL u = new URL(m_sConnectUrl);

   // InputStream in = u.openConnection().getInputStream();
   InputStream in = u.openStream();
   xpp.setInput(in, "utf-8");

   int eventType = xpp.getEventType();

   while (eventType != XmlPullParser.END_DOCUMENT) {
    if (eventType == XmlPullParser.START_DOCUMENT) {
    }
    else if (eventType == XmlPullParser.END_DOCUMENT) {
     
    }
    else if (eventType == XmlPullParser.START_TAG) {
     sTag = xpp.getName();

     if (sTag.equals("title")) {
      xmlData = new XmlData();
      xmlData.d_title = xpp.nextText();
     }
     if (sTag.equals("link")) {
      xmlData.d_link = xpp.nextText();
     }
     if (sTag.equals("thumbnail")) {
      xmlData.d_thumbnail = xpp.nextText();
     }

    } else if (eventType == XmlPullParser.END_TAG) {
     sTag = xpp.getName();
     if (sTag.equals("item")) {
      m_xmlData.add(xmlData);
      xmlData = null;
     }
    } else if (eventType == XmlPullParser.TEXT) {
    }
    eventType = xpp.next();
   }

  } catch (Exception e) {
   
  }

  return m_xmlData;
 }

 public void listAdd() {
  try {

   XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
   factory.setNamespaceAware(true);
   XmlPullParser xpp = factory.newPullParser();

   URL u = new URL(m_sConnectUrl);
   // InputStream in = u.openConnection().getInputStream();
   InputStream in = u.openStream();
   xpp.setInput(in, "utf-8");

   int eventType = xpp.getEventType();

   while (eventType != XmlPullParser.END_DOCUMENT) {
    if (eventType == XmlPullParser.START_DOCUMENT) {
     // System.out.println("Start document");
    } else if (eventType == XmlPullParser.END_DOCUMENT) {
     // System.out.println("End document");
    } else if (eventType == XmlPullParser.START_TAG) {

     // Log.e("START_TAG",xpp.getName());
     sTag = xpp.getName();

     if (sTag.equals("title")) {
      System.out.println("sTag : title");
      xmlData = new XmlData();
      xmlData.d_title = xpp.nextText();
     }
     if (sTag.equals("link")) {
      xmlData.d_link = xpp.nextText();
     }
     if (sTag.equals("thumbnail")) {
      xmlData.d_thumbnail = xpp.nextText();
     }

    } else if (eventType == XmlPullParser.END_TAG) {
     sTag = xpp.getName();
     if (sTag.equals("item")) {
      m_xmlData.add(xmlData);
      xmlData = null;
     }
    } else if (eventType == XmlPullParser.TEXT) {
    }
    eventType = xpp.next();
   }
   adapter.notifyDataSetChanged();

  } catch (Exception e) {
   // TODO: handle exception
  }
 }

 // List의 row를 변형하기 위해 Adapter 오버라이딩
 private class XmlListAdapter extends ArrayAdapter {

  private ArrayList items;

  public XmlListAdapter(Context context, int textViewResourceId,
    ArrayList items) {
   super(context, textViewResourceId, items);
   this.items = items;
  }

  public View getView(int position, View convertView, ViewGroup parent) {

   View v = convertView;

   if (v == null) {
    LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = vi.inflate(R.layout.row, null);
   }

   XmlData xmlData = (XmlData) items.get(position);
   if (xmlData != null) {
    TextView tv1 = (TextView) v.findViewById(R.id.title);
    ImageView tv2 = (ImageView) v.findViewById(R.id.thumb);

    if (tv1 != null) {
     // tv1.setText(xmlData.d_title);
     tv1.setText(Html.fromHtml("<a href='" + xmlData.d_link
       + "'>" + xmlData.d_title + "</a>"));
     tv1.setMovementMethod(LinkMovementMethod.getInstance());
    }
    if (tv2 != null) {

     URL url = null;
     try {
      url = new URL(xmlData.d_thumbnail);
     } catch (MalformedURLException e) {
      e.printStackTrace();
     }
     tv2.setImageBitmap(getRemoteImage(url));// 이미지를 등록해야할부분
    }
   }

   return v;
  }
 }

 public Bitmap getRemoteImage(final URL aURL) {
  try {
   final URLConnection conn = aURL.openConnection();
   conn.connect();
   final BufferedInputStream bis = new BufferedInputStream(conn
     .getInputStream());
   final Bitmap bm = BitmapFactory.decodeStream(bis);

   bis.close();
   return bm;

  } catch (IOException e) {
   Log.d("DEBUGTAG", "Oh noooz an error...");
  }
  return null;
 }
 
 private class GrabURL extends AsyncTask<String, Void, Void>{
//  private final HttpClient Client = new DefaultHttpClient();
  private String Content;
  private String Error = null;
  private ProgressDialog Dialog =  new ProgressDialog(XmlParser.this);
  private String searhTxt ="";
  
  private GrabURL(String _searhTxt){
   this.searhTxt = _searhTxt;
  }
  
  /**
   * 작업이 시작되기 직전에 화면에 처리해야할 작업
   */
  protected void onPreExecute() {
   super.onPreExecute();
   Dialog.setMessage("로딩중");
   Dialog.show();
  }
  /**
   * 백그라운드에서 처리해야할 내용
   */
  @Override
  protected Void doInBackground(String... params) {
   try{
//    HttpGet httpget = new HttpGet();
//    ResponseHandler <String> resposeHandler = new BasicResponseHandler();
//    Content = Client.execute(httpget , resposeHandler);
    System.out.println("=======doInBackground=========");
    searchXml(searhTxt);
    System.out.println("=======doInBackground=========2");
    
   }catch(Exception e){
    Error = e.getMessage();
    cancel(true);
   }
   return null;
  }
  /**
   * 백그라운드 작업이 종료된 직후 화면에 처리해야 할 작업
   */
  @Override
  protected void onPostExecute(Void result) {
   // TODO Auto-generated method stub
   super.onPostExecute(result);
   System.out.println("=======onPostExecute=========");
   System.out.println("m_xmlData : "+m_xmlData);
   adapter = new XmlListAdapter(XmlParser.this, R.layout.row, m_xmlData);
   System.out.println("=======onPostExecute2=========");
   setListAdapter(adapter);
   Dialog.dismiss();

  }
 
  
 }
}