2013-04-20 103 views
0

在我的应用程序中,一个活动包含厨房,它可以在SD卡创建的文件夹中调用存储所有图像的顺序(saved_images),每件事情都可以正常运行,但是如果删除文件夹(saved_images),然后再次打开应用程序并保存任何图像,应用程序将再次创建(saved_images)文件夹,但保存的图像编号仍然记住SharedPreferences值并将图像存储在继续no。以前保存删除旧文件夹中的图片,我的目标是获得如下:再次保存,清除并保存SharedPreferences

一次从SD卡中删除(saved_images)文件夹自动SharedPreferences必须cleard如果(saved_images)文件夹中创建它再次存储从图像开始意味着图像-1,图像-2等等。

我试着用这段代码清除SharedPreferences,但它不起作用,可能会导致只存储一张图片,只能称为image-1。

2-如果我保存同一图像两次它保存,但我需要保存一次只有一次,当试图再次保存它时必须给吐司:已保存。

这是一段代码,我用它来清除和恢复SharedPreferences:

View vi=convertView; 
    final ViewHolder holder; 
    if(convertView==null){ 
     vi = inflater.inflate(R.layout.gallery_items, null); 
     holder=new ViewHolder(); 
     holder.text=(TextView)vi.findViewById(R.id.textView1); 
     holder.image=(ImageView)vi.findViewById(R.id.image); 
     holder.button=(Button)vi.findViewById(R.id.button_save); 

     holder.button.setOnClickListener(new OnClickListener() { 

    private Bitmap bm; 
public void onClick(View arg0) { 
    String root = Environment.getExternalStorageDirectory().toString(); 
     File myDir = new File(root + "/saved_images"); 
     if(!myDir.exists()){ 
      myDir.mkdirs(); 
    bm = BitmapFactory.decodeResource(mContext.getResources(), images[itemPos]); 
     holder.image.setImageBitmap(bm); 
SharedPreferences savedNumber = mContext.getSharedPreferences(PREFS_NAME, 0); 
     int lastSavedNumber = savedNumber.getInt("lastsavednumber",0); 
     lastSavedNumber++; 
     String fname = "Image-"+lastSavedNumber+".png"; 

     File file = new File (myDir, fname); 
     if (file.exists()) {file.delete(); } 
     try { 
     FileOutputStream out = new FileOutputStream(file); 
      bm.compress(Bitmap.CompressFormat.PNG, 100, out); 
     out.flush(); 
     out.close(); } 
     catch (Exception e) { 
     e.printStackTrace(); } 

     SharedPreferences saveNumber = mContext.getApplicationContext 
       ().getSharedPreferences(PREFS_NAME, 0); 
     SharedPreferences.Editor editorset = saveNumber.edit(); 
     editorset.putInt("lastsavednumber",lastSavedNumber); 
     editorset.commit();} 

    else if(!myDir.delete()){ 
    SharedPreferences saveNumber1 = mContext.getApplicationContext 
     ().getSharedPreferences(PREFS_NAME, 0); 
    SharedPreferences.Editor editor = saveNumber1.edit(); 
    editor.clear(); 
    editor.commit(); 

Toast.makeText(mContext, "saved", Toast.LENGTH_SHORT). show();}}}); 
     vi.setTag(holder);} 

    else holder=(ViewHolder)vi.getTag(); 
    holder.text.setText(name[itemPos]); 

    final int stub_id=images[itemPos]; 
    holder.image.setImageResource(stub_id); 

    return vi; } 

,这原代码,做工精细,所有的图像存储在顺序

在SD卡文件夹。

View vi=convertView; 
    final ViewHolder holder; 
    if(convertView==null){ 
     vi = inflater.inflate(R.layout.gallery_items, null); 
     holder=new ViewHolder(); 
     holder.text=(TextView)vi.findViewById(R.id.textView1); 
     holder.image=(ImageView)vi.findViewById(R.id.image); 
     holder.button=(Button)vi.findViewById(R.id.button_save); 

     holder.button.setOnClickListener(new OnClickListener() { 

    private Bitmap bm; 
    private String PREFS_NAME; 
public void onClick(View arg0) { 
     String root = Environment.getExternalStorageDirectory().toString(); 
     File myDir = new File(root + "/saved_images"); 
     if(!myDir.exists()){ 
      myDir.mkdirs();} 
    bm = BitmapFactory.decodeResource(mContext.getResources(), images[itemPos]); 
     holder.image.setImageBitmap(bm); 
SharedPreferences savedNumber = mContext.getSharedPreferences(PREFS_NAME, 0); 
     int lastSavedNumber = savedNumber.getInt("lastsavednumber",0); 
     lastSavedNumber++; 
     String fname = "Image-"+lastSavedNumber+".png"; 

     File file = new File (myDir, fname); 
     if (file.exists()) {file.delete(); } 
     try { 
     FileOutputStream out = new FileOutputStream(file); 
     bm.compress(Bitmap.CompressFormat.PNG, 100, out); 
     out.flush(); 
     out.close(); } 
     catch (Exception e) { 
     e.printStackTrace(); 
     } 

    SharedPreferences saveNumber = mContext.getApplicationContext 
       ().getSharedPreferences(PREFS_NAME, 0); 
    SharedPreferences.Editor editorset = saveNumber.edit(); 
    editorset.putInt("lastsavednumber",lastSavedNumber); 
    editorset.commit(); 
    Toast.makeText(mContext, "saved", Toast.LENGTH_SHORT). show();}}); 

     vi.setTag(holder);} 

    else holder=(ViewHolder)vi.getTag(); 
    holder.text.setText(name[itemPos]); 

    final int stub_id=images[itemPos]; 
    holder.image.setImageResource(stub_id); 

    return vi; } 

我知道疗法是有些东西丢失或错误的方式应用,所以请任何帮助方面将会理解,谢谢。

+0

@ android116你检查了我的答案... – GoCrazy 2013-04-22 10:34:19

回答

1

问题1

虽然删除您的文件夹,你必须设置你的SharedPreferences值为零。因此,它会与你当前的代码工作,像你预期

if(!myDir.exists()){ 
myDir.mkdirs(); 
SharedPreferences saveNumber = mContext.getApplicationContext().getSharedPreferences(PREFS_NAME, 0); 
SharedPreferences.Editor editorset = saveNumber.edit(); 
editorset.putInt("lastsavednumber",0); 
editorset.commit(); 
} 

问题2 创建一个数据库来对图像包括保存/未保存的状态下,所有的细节。

不是将值存储在数组中,而必须将其存储到数据库中。

在将图像保存到SD卡之前,您必须检查数据库已保存/未保存的状态。如果没有保存,那么你可以保存图像,而且你必须更新数据库列状态,只保存该图像。因此,下次用户按下相同的图像时,您会发现图像已保存。您可以将Toast作为图像保存。

+0

我们可以聊天吗请 – androidqq6 2013-04-22 10:54:35

+0

谢谢我的朋友,+1票并接受它。 – androidqq6 2013-04-22 11:47:33

+0

嗨,我的朋友你会请在这篇文章上看到:http://stackoverflow.com/questions/16250102/html-tag-div-in-string-webview – androidqq6 2013-04-27 13:11:08

0

在你原来的代码你可以只

... 
int lastSavedNumber = savedNumber.getInt("lastsavednumber",0); 
... 
if(!myDir.exists()) 
{ 
     myDir.mkdirs(); 
     lastSavedNumber = 0; // reset counter 
} 
... 
+0

我的朋友你的意思是改变这个:if(!myDir.exists()){ myDir.mkdirs();} to this:if(!myDir.exists() )) { myDir。mkdirs(); lastSavedNumber = 0; //重置计数器 } 谢谢 – androidqq6 2013-04-21 09:13:56

+0

您应该首先从首选项加载'lastSavedNumber',然后测试您的文件夹是否仍然存在。如果它不存在,则意味着所有图片都消失了,您必须重置'lastSavedNumber = 0'才能从头开始。 – 2013-04-21 09:35:19

+0

如果我一次保存两次保存相同的图像,但是我只需要一次保存一次,并在尝试再次保存时必须提供Toast:已保存。 你能帮我怎么做,我的朋友,谢谢 – androidqq6 2013-04-21 09:57:11