2012-04-25 2 views
0

누군가이 코드를 변경하여 검색 버튼을 누르지 않고 자동로드되도록 도와 주면 궁금하십니까? 그냥 액티비티를 호출하고 Flickr 사진을로드해야합니다 ... 바로 지금로드 버튼을 눌러야합니다 ... 정말 고마워요!Android 갤러리 자동로드

package com.windmillagency; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 

import org.apache.http.HttpEntity; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 



import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Gallery; 
import android.widget.ImageView; 
import android.widget.Toast; 

public class AndroidFlickrActivity extends Activity { 

    public String thisActivityName = "Flickr"; 

    ProgressDialog progressDialog; 
    BackgroundThread backgroundThread; 

    public class FlickrImage { 
     String Id; 
     String Owner; 
     String Secret; 
     String Server; 
     String Farm; 
     String Title; 

     Bitmap FlickrBitmap; 

     FlickrImage(String _Id, String _Owner, String _Secret, 
       String _Server, String _Farm, String _Title){ 
      Id = _Id; 
      Owner = _Owner; 
      Secret = _Secret; 
      Server = _Server; 
      Farm = _Farm; 
      Title = _Title; 

      FlickrBitmap = preloadBitmap(); 
     } 

     private Bitmap preloadBitmap(){ 
      Bitmap bm= null; 

      String FlickrPhotoPath = 
        "http://farm" + Farm + ".static.flickr.com/" 
        + Server + "/" + Id + "_" + Secret + "_m.jpg"; 

      URL FlickrPhotoUrl = null; 

      try { 
       FlickrPhotoUrl = new URL(FlickrPhotoPath); 

       HttpURLConnection httpConnection 
        = (HttpURLConnection) FlickrPhotoUrl.openConnection(); 
       httpConnection.setDoInput(true); 
       httpConnection.connect(); 
       InputStream inputStream = httpConnection.getInputStream(); 
       bm = BitmapFactory.decodeStream(inputStream); 

      } catch (MalformedURLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      return bm; 
     } 

     public Bitmap getBitmap(){ 
      return FlickrBitmap; 
     } 

    } 

    class FlickrAdapter extends BaseAdapter{ 
     private Context context; 
     private FlickrImage[] FlickrAdapterImage;; 

     FlickrAdapter(Context c, FlickrImage[] fImage){ 
      context = c; 
      FlickrAdapterImage = fImage; 
     } 

     public int getCount() { 
      // TODO Auto-generated method stub 
      return FlickrAdapterImage.length; 
     } 

     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return FlickrAdapterImage[position]; 
     } 

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

     public View getView(int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      ImageView image; 
      if (convertView == null) { 
       image = new ImageView(context); 
       image.setLayoutParams(new Gallery.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
       image.setScaleType(ImageView.ScaleType.FIT_CENTER); 
       image.setPadding(8, 8, 8, 8); 
      } else { 
       image = (ImageView) convertView;  
      } 

      image.setImageBitmap(FlickrAdapterImage[position].getBitmap()); 

      return image; 
     } 

    } 

    FlickrImage[] myFlickrImage; 

    /* 
    * FlickrQuery = FlickrQuery_url 
    * + FlickrQuery_per_page 
    * + FlickrQuery_nojsoncallback 
    * + FlickrQuery_format 
    * + FlickrQuery_tag + q 
    * + FlickrQuery_key + FlickrApiKey 
    */ 

    String FlickrQuery_url = "http://api.flickr.com/services/rest/?method=flickr.people.getPublicPhotos&api_key=fdd73dc07613841fbe325b5103d673b7&[email protected]&per_page=25&format=json"; 
    String FlickrQuery_per_page = "&per_page=10"; 
    String FlickrQuery_nojsoncallback = "&nojsoncallback=1"; 
    String FlickrQuery_format = "&format=json"; 
    String FlickrQuery_tag = "&tags="; 
    String FlickrQuery_key = "&api_key="; 

    // Apply your Flickr API: 
    // www.flickr.com/services/apps/create/apply/? 
    String FlickrApiKey = "fdd73dc07613841fbe325b5103d673b7"; 

    //final String DEFAULT_SEARCH = "Bill_Gate"; 
    final String DEFAULT_SEARCH = "new_york"; 

    EditText searchText; 
    Button searchButton; 

    Gallery photoBar; 

    Bitmap bmFlickr; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     searchText = (EditText)findViewById(R.id.searchtext); 
     searchText.setText(DEFAULT_SEARCH); 
     searchButton = (Button)findViewById(R.id.searchbutton); 

     photoBar = (Gallery)findViewById(R.id.photobar); 

     searchButton.setOnClickListener(searchButtonOnClickListener); 
    } 

    private Button.OnClickListener searchButtonOnClickListener 
    = new Button.OnClickListener(){ 

     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      progressDialog = ProgressDialog.show(AndroidFlickrActivity.this, 
        "ProgressDialog", "Wait!"); 

      backgroundThread = new BackgroundThread(); 
      backgroundThread.setRunning(true); 
      backgroundThread.start(); 




     }}; 


    private String QueryFlickr(String q){ 

     String qResult = null; 

     String qString = 
       FlickrQuery_url 
       + FlickrQuery_per_page 
       + FlickrQuery_nojsoncallback 
       + FlickrQuery_format 
       + FlickrQuery_tag + q 
       + FlickrQuery_key + FlickrApiKey; 

     HttpClient httpClient = new DefaultHttpClient(); 
     HttpGet httpGet = new HttpGet(qString); 

     try { 
      HttpEntity httpEntity = httpClient.execute(httpGet).getEntity(); 

      if (httpEntity != null){ 
       InputStream inputStream = httpEntity.getContent(); 
       Reader in = new InputStreamReader(inputStream); 
       BufferedReader bufferedreader = new BufferedReader(in); 
       StringBuilder stringBuilder = new StringBuilder(); 

       String stringReadLine = null; 

       while ((stringReadLine = bufferedreader.readLine()) != null) { 
        stringBuilder.append(stringReadLine + "\n"); 
        } 

       qResult = stringBuilder.toString(); 
       inputStream.close(); 
      } 

     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return qResult; 
    } 

    private FlickrImage[] ParseJSON(String json){ 

     FlickrImage[] flickrImage = null; 

     bmFlickr = null; 
     String flickrId; 
     String flickrOwner; 
     String flickrSecret; 
     String flickrServer; 
     String flickrFarm; 
     String flickrTitle; 

     try { 
      JSONObject JsonObject = new JSONObject(json); 
      JSONObject Json_photos = JsonObject.getJSONObject("photos"); 
      JSONArray JsonArray_photo = Json_photos.getJSONArray("photo"); 

      flickrImage = new FlickrImage[JsonArray_photo.length()]; 
      for (int i = 0; i < JsonArray_photo.length(); i++){ 
       JSONObject FlickrPhoto = JsonArray_photo.getJSONObject(i); 
       flickrId = FlickrPhoto.getString("id"); 
       flickrOwner = FlickrPhoto.getString("owner"); 
       flickrSecret = FlickrPhoto.getString("secret"); 
       flickrServer = FlickrPhoto.getString("server"); 
       flickrFarm = FlickrPhoto.getString("farm"); 
       flickrTitle = FlickrPhoto.getString("title"); 
       flickrImage[i] = new FlickrImage(flickrId, flickrOwner, flickrSecret, 
         flickrServer, flickrFarm, flickrTitle); 
      } 

     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return flickrImage; 
    } 

    public class BackgroundThread extends Thread{ 
     volatile boolean running = false; 
     int cnt; 

     void setRunning(boolean b){ 
      running = b;  
      cnt = 10; 
     } 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      String searchQ = searchText.getText().toString(); 
      String searchResult = QueryFlickr(searchQ); 

      myFlickrImage = ParseJSON(searchResult); 


      handler.sendMessage(handler.obtainMessage()); 
     } 
    } 

    Handler handler = new Handler(){ 

     @Override 
     public void handleMessage(Message msg) { 
      // TODO Auto-generated method stub 

      progressDialog.dismiss(); 
      photoBar.setAdapter(new FlickrAdapter(AndroidFlickrActivity.this, myFlickrImage)); 
      Toast.makeText(AndroidFlickrActivity.this, 
        "Flickr images loaded", Toast.LENGTH_LONG).show(); 
     } 

    }; 

} 







XML File 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" 
    /> 
<EditText 
    android:id="@+id/searchtext" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    /> 
<Button 
    android:id="@+id/searchbutton" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Search" 
    /> 
<TextView 
    android:id="@+id/queryresult" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    /> 
<Gallery 
    android:id="@+id/photobar" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:spacing="10dp" 
    /> 
</LinearLayout> 

답변

1

주 스레드에서 Adapter.notifyDataSetChanged()를 호출해야합니다. 핸들러를 사용하여 주 스레드에 게시하십시오.

BaseAdapter mBaseAdapter; 

// ... some init stuff 

mHandler = new Handler(Looper.getMainLooper()) { 
    @Override public void handleMessage(Message msg) { 
     mBaseAdapter.notifyDataSetChanged(); 

     mHandler.sendEmptyDelayedMessage(-1, 100); 
    } 
}; 
+0

응답 해 주셔서 감사합니다. 궁금해하는 경우 코드에 나를 구현할 수있는 방법을 보여줄 수 있습니다 ... 아주 새로운하지만 지금은 에뮬레이터에서 일하고 있어요 :) 당신이 내게 정확히 어떤 일을 바꿀 수있는 곳을 보여줄 수 있다면 .. soo. 거기에 단추를 넣고 싶지는 않아요. – user1120680

+0

생성자 (클래스 스코프 포함)에서 핸들러를 인스턴스화 한 다음 자동 업데이트 프로그램을 시작하려면'mHandler.sendEmptyMessage (-1);을 호출하십시오. – AedonEtLIRA

+0

감사합니다. 프로그래밍 및 코드 수정을 시도하는 중 ... 내 코드를 보여줄 시간이 있다면 좋을 것입니다! 배워야 할 것이 많으므로, 다시 한번 감사드립니다! – user1120680