2012-05-28 64 views
0

对于android来说非常新颖,想知道如何让此示例代码返回到停止的位置,而不必在返回屏幕时重新加载图片。现在,当我退出屏幕并返回时,我必须从头开始。我已阅读并尝试了解Android文档,但无法完成此工作或从何处着手......谢谢大家!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.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,存储到数据库,平面文件等。

在您的onResume()方法中,读取该状态并将其恢复。

+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事件?你可以在代码中告诉我你可以放置它吗?所以,新的这个,并试图弄清楚。已经阅读了很多链接 – user1120680