2012-05-28 3 views
0

안드로이드에 대해 매우 새로운 기능이며 어떻게하면이 샘플 코드를 화면으로 돌아갈 때 그림을 다시로드 할 필요없이 중단 할 수 있는지 궁금 할 것입니다. 지금 화면을 종료하고 돌아올 때 나는 처음부터 다시 시작해야합니다. 나는 안드로이드 문서를 읽고 이해하려고 노력하고 있지만이 작업을하거나 시작하는 데 문제가 있습니다 ... 모두에게 감사드립니다!안드로이드가 액티비티로 돌아 가기에 관한 정보를 저장합니다.

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.ProgressDialog; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.view.LayoutInflater; 
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.LinearLayout; 
import android.widget.Toast; 

public class AndroidFlickrActivity extends BT_activity_base { 



    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 = "flickr"; 

    EditText searchText; 
    Button searchButton; 

    Gallery photoBar; 

    Bitmap bmFlickr; 




    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     this.activityName = "AndroidFlickrActivity"; 
     BT_debugger.showIt(activityName + ":onCreate"); 



     //reference to base layout.. 
      LinearLayout baseView = (LinearLayout)findViewById(R.id.baseView); 

      //setup background colors... 
      BT_viewUtilities.updateBackgroundColorsForScreen(this, this.screenData); 

      //setup background images.. 
      if(backgroundImageWorkerThread == null){ 
       backgroundImageWorkerThread = new BackgroundImageWorkerThread(); 
       backgroundImageWorkerThread.start(); 
      }   





      //setup navigation bar... 
      LinearLayout navBar = BT_viewUtilities.getNavBarForScreen(this, this.screenData); 
      if(navBar != null){ 
       baseView.addView(navBar); 
      } 

      //inflate this screens layout file... 
      LayoutInflater vi = (LayoutInflater)thisActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View thisScreensView = vi.inflate(R.layout.flickr, null); 

      //add the view to the base view... 
      baseView.addView(thisScreensView); 

     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); 
    } 


/////////////////////////////////////////////////// 
//activity life-cycle overrides 


//onResume 
@Override 
public void onResume() { 
super.onResume(); 
//Log.i("ZZ", thisActivityName + ":onResume"); 
tToast("onResume"); 
}  



private void tToast(String s) { 
    Context context = getApplicationContext(); 
    int duration = Toast.LENGTH_SHORT; 
    Toast toast = Toast.makeText(context, s, duration); 
    toast.show(); 
} 


//onPause 
@Override 
public void onPause() { 
//Log.i("ZZ", thisActivityName + ":onPause"); 
super.onPause(); 
tToast("onPause"); 
} 



//activity life-cycle overrides 
/////////////////////////////////////////////////// 


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

     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      progressDialog = ProgressDialog.show(AndroidFlickrActivity.this, 
        "Progress", "Please 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, 
        "Images Loaded", Toast.LENGTH_LONG).show(); 
     } 

    }; 

} 

답변

1

활동을 작성하여 현재 상태를 인식하도록하십시오.

onPause() 방법에서 원하는대로 상태를 저장하십시오. SharedPrefs, 데이터베이스에 대한 저장소, 플랫 파일 등

메서드에서 해당 상태를 읽고 복원하십시오.

+0

이 코드에서 어디에서 onPause 및 onResume을 배치해야할지 모르시겠습니까? 고맙습니다. – user1120680

+0

이것들은 http://developer.android.com/reference/android/app/Activity.html 클래스의 메소드입니다. 클래스가 Activity를 확장하기 때문에'onCreate()'메소드를 추가 한 것과 같은 방식으로 클래스 메소드처럼 추가 할 수 있습니다. http://terokarvinen.com/2011/lifecycle-code-example-android-oncreate-onpause-onresume은 이러한 활동 라이프 사이클 메소드 및 기타 활동 라이프 사이클 메소드를 보여줍니다. 페이지가 제시하는 축배를 제거하고 대신 자신의 상태 저장소/검색을 사용해야합니다. – mah

+0

링크를 제공해 주셔서 감사합니다. 조금 더 나아졌습니다. 가장 큰 문제는 여기가 빌린 예제 코드이고 lifecylcle 이벤트를 배치 할 위치를 모르겠습니다. 당신이 그것을 배치 할 수있는 코드에 나를 보여줄 수 있습니까? soooo 이것에 새롭고 그것을 이해하려고 노력한다. 수많은 링크를 읽으 셨습니다. – user1120680

관련 문제