0

在我的应用 InfiniteGallery 类中,通过按下按钮,您可以将任何图像保存到 SD 卡,以获取上次保存的编号并存储保存的图像的最后编号,以便您可以按顺序存储所有图像 ,但是当添加 SharedPreferences 时,我有红线下的错误:

1- SharedPreferences savedNumber = getSharedPreferences(PREFS_NAME, 0); (在 :getSharedPreferences 下)。

错误是:创建方法'getSharedPreferences'(字符串,int)'

2- SharedPreferences saveNumber = getApplicationContext().getSharedPreferences(PREFS_NAME, 0); (在:getApplicationContext下)。

错误是:创建方法'getApplicationContext()'

我试图修复它但是icant,任​​何建议或帮助将不胜感激,谢谢

我的代码:

   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);
bm = BitmapFactory.decodeResource( mContext.getResources(), images[itemPos]);
         holder.image.setImageBitmap(bm);           
        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();}

        SharedPreferences savedNumber = 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);
                 //Your Bitmap from the resouce 
        out.flush(); 
        out.close(); 
        Toast.makeText(mContext, "Saved", Toast.LENGTH_LONG).show();}
         catch (Exception e) { 
        e.printStackTrace(); }

       SharedPreferences saveNumber = getApplicationContext().getSharedPreferences
               (PREFS_NAME, 0); 
        SharedPreferences.Editor editorset = saveNumber.edit(); 
        editorset.putInt("lastsavednumber",lastSavedNumber); 
        editorset.commit();
      Toast.makeText(mContext, "button clicked", Toast.LENGTH_LONG). 
                 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; } 
4

2 回答 2

0

知道那条红线说什么会很有帮助,但在这里我相信这是因为你失踪了Context。将其更改为

SharedPreferences savedNumber = this.getSharedPreferences(PREFS_NAME, 0);

SharedPreferences saveNumber = this.getSharedPreferences(PREFS_NAME, 0);

根据您在应用程序中的位置,您可能需要您所在ActivityName.thisActivityName名称Activity

于 2013-04-17T17:55:11.057 回答
0

这都是因为您处于没有此方法的类的范围内。

你可以做的是接下来的事情之一:

  1. 在函数中有一个 Context 类型的参数,并将其用于使用方法“getSharedPreferences”。

  2. 有一个 Context 类型的字段,并将其设置在您班级的 CTOR 中。

  3. 如果您的类在扩展 Context 的类中,而不是 this.getSharedPreferences,请写下类的名称,然后写“.this.getSharedPreferences”。

  4. 创建一个将保存应用程序实例的全局静态变量。您可以在应用程序类的 onCreate() 中实例化它。每当您需要上下文时,都可以使用它而不是在类和方法之间传递实例。

于 2013-04-17T20:09:01.140 回答