Search code examples
androidandroid-intentandroid-gridviewandroid-galleryandroid-external-storage

How do I persist images on Gridview? Please someone


I have the code below which take a list of images which are picked out from Gallery into the GridView layout. The pictures are shown up in the GridView layout just fine, but the problem is that these pictures disappear when I close the app or when I pick different pictures from the Gallery.

Would someone please point me to the right direction?

Any help would be greatly appreciated.

Code:

public class MainActivity extends Activity {

   GridView gridGallery;
   Handler handler;
   Gallery_Adapter_Activity adapter;

   Button btnGalleryPick;
   Button btnGalleryPickMul;

   String action;
   ViewSwitcher viewSwitcher;
   ImageLoader imageLoader;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);

    initImageLoader();
    init();
}

private void initImageLoader() {
    @SuppressWarnings("deprecation")
    DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
            .cacheOnDisc().imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
            .bitmapConfig(Bitmap.Config.RGB_565).build();
    ImageLoaderConfiguration.Builder builder = new ImageLoaderConfiguration.Builder(
            this).defaultDisplayImageOptions(defaultOptions).memoryCache(
            new WeakMemoryCache());

    ImageLoaderConfiguration config = builder.build();
    imageLoader = ImageLoader.getInstance();
    imageLoader.init(config);
}

private void init() {

    handler = new Handler();
    gridGallery = (GridView) findViewById(R.id.gridGallery);
    gridGallery.setFastScrollEnabled(true);                     
    adapter = new Gallery_Adapter_Activity(getApplicationContext(), imageLoader);
    adapter.setMultiplePick(false);
    gridGallery.setAdapter(adapter);

    viewSwitcher = (ViewSwitcher) findViewById(R.id.viewSwitcher);
    viewSwitcher.setDisplayedChild(1);


    Button done_button = (Button) findViewById(R.id.done);      
    done_button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {       
            finish();                           
        }                       
    });


    btnGalleryPickMul = (Button) findViewById(R.id.btnGalleryPickMul);
    btnGalleryPickMul.setOnClickListener(new View.OnClickListener() {                               

        @Override
        public void onClick(View v) {       //Add Images Button OnClickListener
            Intent i = new Intent(Multiple_Pick_Activity.ACTION_MULTIPLE_PICK);
            startActivityForResult(i, 12345);           
        }                           
    });

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == result_requestcode && resultCode == Activity.RESULT_OK)

{       

SDcardPath_Activity SDcardPath_Class = new SDcardPath_Activity();

String[] ALL_Paths = data.getStringArrayExtra("all_path");

for (String single_path : ALL_Paths) 
{      

    SQ_LITE_DATABASE.addImageFile(single_path);           

}

try { 


ArrayList<SDcardPath_Activity> SQLite_Databse_Data = SQ_LITE_DATABASE.readImageFiles();
SQLite_Databse_Data.add(SDcardPath_Class);

viewSwitcher.setDisplayedChild(0);
adapter.addAll(SQLite_Databse_Data);        

Intent intent = new Intent (Image_MainActivity.this, Image_MainActivity.class);
startActivity(intent);
finish();

  } catch (Exception e) 
  {
   e.printStackTrace();
   return;

  }
 }       
}

Edit: posted the working code above


Solution

  • Put these in your onActivityResult:

      @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    
    if (requestCode == result_requestcode && resultCode == Activity.RESULT_OK)
    
        {       
    
        SDcardPath_Activity SDcardPath_Class = new SDcardPath_Activity();
    
        String[] ALL_Paths = data.getStringArrayExtra("all_path");
    
        for (String single_path : ALL_Paths) 
        {      
    
            SQ_LITE_DATABASE.addImageFile(single_path);           
    
        }
    
     try { 
    
    
        ArrayList<SDcardPath_Activity> SQLite_Databse_Data = SQ_LITE_DATABASE.readImageFiles();
        SQLite_Databse_Data.add(SDcardPath_Class);
    
        viewSwitcher.setDisplayedChild(0);
        adapter.addAll(SQLite_Databse_Data);        
    
        Intent intent = new Intent (Image_MainActivity.this, Image_MainActivity.class);
        startActivity(intent);
        finish();
    
       } catch (Exception e) 
       {
        e.printStackTrace();
        return;
    
       }
      }       
     }