2013-04-17 33 views
0

在我的應用程序InfiniteGallery類,只需按下按鈕,你可以將任何圖片保存到SD卡,以獲取最後保存的號碼和店鋪保存圖像的最後一個號碼,以便您可以存儲中的所有圖片順序訂購,但是當添加SharedPreferences時,我有紅線錯誤:SharedPreferences得到最後保存的號碼圖像問題

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

錯誤是:創建方法 'getSharedPreferences'(字符串,整數)」

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

回答

0

這將是有益知道紅線說什麼,但在這裏,我相信這是因爲你缺少Context。將其更改爲

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

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

根據您在該應用,在那裏你可能需要ActivityName.this其中ActivityName是名稱的Activity你在

+0

謝謝回答,即時通訊出現一次到家我會檢查它,並張貼錯誤詳細 – androidqq6

+0

確定,這應該解決的問題,因爲你肯定需要一個'Context'訪問它們 – codeMagic

+0

我申請,但仍紅線錯誤,請檢查更新後的declairing錯誤,請感謝 – androidqq6

0

這一切都是因爲你在沒有這種方法的類的範圍內。

你可以做什麼是接下來的事情就一個:

  1. 有型上下文的參數在功能和使用它的使用方法「getSharedPreferences」。

  2. 有型上下文的領域,並將其設置在類的CTOR。

  3. 如果您的類位於擴展Context的類中,而不是this.getSharedPreferences,請編寫該類的名稱,然後輸入「.this.getSharedPreferences」。

  4. 創建一個全局靜態變量,用以存放應用程序實例。您可以在應用程序類的onCreate()中創建它。每當你需要一個上下文時,你可以使用它而不是在類和方法之間傳遞一個實例。