2014-10-04 84 views
0

我想使用sharedpreferences當用戶選擇一個特定的自定義圖像,他們想要在他們的存儲部分網格圖像。即使在關閉應用程序並重新打開之後,我也希望他們選擇顯示的圖像。我遇到的問題是共享首選似乎不起作用。沒有任何東西顯示爲他們關閉應用後選擇的網格項的背景圖像,甚至只是按下後退按鈕。sharedpreferences沒有加載或保存

我必須自己創建一個sharedpreferences文件嗎?我無法弄清楚如何使用androidstudio來創建一個。

這裏是我的類代碼(很抱歉,如果它的長和凌亂......我是新來的編碼和仍在測試的東西):

public class editCreations extends Activity { 

    public int mPosition = 0; 
    protected static Sounds sound = new Sounds(); 
    private static int RESULT_LOAD_IMAGE = 1; 

    private MediaRecorder mRecorder; 
    private MediaPlayer mPlayer; 
    private String mOutputFile = Environment.getExternalStorageDirectory().getAbsolutePath(); 
    private Drawable mImageFileName; 
    private Button recordBtn; 
    private Button stopBtn; 
    private Button playBtn; 
    private Button stopPlayBtn; 
    private ImageButton imgBtn; 
    private Drawable bg; 
    private String mPicturePath; 



    private ImageAdapter img = new ImageAdapter(this); 





    View.OnClickListener playListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(editCreations.this, "test", Toast.LENGTH_SHORT); 
     } 
    }; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_create); 

     mRecorder = new MediaRecorder(); 
     mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     mRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); 
     mRecorder.setOutputFile(mOutputFile); 

     recordBtn = (Button)findViewById(R.id.create_record_button); 
     recordBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       start(view); 
      } 
     }); 

     stopBtn = (Button)findViewById(R.id.create_stop_record_button); 
     stopBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       stop(view); 
      } 
     }); 

     playBtn = (Button)findViewById(R.id.create_play_button); 
     playBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       play(view); 
      } 
     }); 

     stopPlayBtn = (Button)findViewById(R.id.create_stop_button); 
     stopPlayBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       stopPlay(view); 
      } 
     }); 

     imgBtn = (ImageButton)findViewById(R.id.imageButton); 

     Intent extra = getIntent(); 
     Bundle extras = extra.getExtras(); 

     // gave mPosition a default int to debug and find problem -> found it 
     mPosition = extras.getInt("position"); 
     getSelectedFile(mPosition); 

     imgBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent i = new Intent(
         Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

       startActivityForResult(i, RESULT_LOAD_IMAGE); 
      } 
     }); 




    } 

    public void start (View view) { 
     try { 

      mRecorder.prepare(); 
      mRecorder.start(); 

     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     recordBtn.setEnabled(false); 
     stopBtn.setEnabled(true); 

     Toast.makeText(editCreations.this, mPosition + "!", Toast.LENGTH_SHORT).show(); 

    } 

    public void stop(View view){ 
     try { 
      mRecorder.stop(); 
      mRecorder.release(); 
      mRecorder = null; 

      stopBtn.setEnabled(false); 
      recordBtn.setEnabled(true); 

      Toast.makeText(getApplicationContext(), "Stop recording...", 
        Toast.LENGTH_SHORT).show(); 

     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (RuntimeException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void play(View view) { 
     try{ 
      mPlayer = new MediaPlayer(); 
      mPlayer.setDataSource(mOutputFile); 
      mPlayer.prepare(); 
      mPlayer.start(); 

      playBtn.setEnabled(false); 
      stopPlayBtn.setEnabled(true); 

      Toast.makeText(getApplicationContext(), "Start play the recording...", 
        Toast.LENGTH_SHORT).show(); 

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

    public void stopPlay(View view) { 
     try { 
      if (mPlayer != null) { 
       mPlayer.stop(); 
       mPlayer.release(); 
       mPlayer = null; 
       playBtn.setEnabled(true); 
       stopPlayBtn.setEnabled(false); 

       Toast.makeText(getApplicationContext(), "Stop playing the recording...", 
         Toast.LENGTH_SHORT).show(); 


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

    public void getSoundPosition(int position) { 
     mOutputFile = mOutputFile + "/Lollatone_clip_" + mPosition + ".3gpp"; 

     // use to get proper image and sound files and edit output file to proper name 
    } 

    public void getSelectedFile(int position) { 
      switch (mPosition) { 
       case 0: 
        imgBtn.setBackgroundResource(R.drawable.sample_0); 
        imgBtn.refreshDrawableState(); 
        break; 
       case 1: 
        imgBtn.setImageBitmap(BitmapFactory.decodeFile(mPicturePath)); 
        imgBtn.refreshDrawableState(); 
        break; 
       case 2: 
        imgBtn.setImageBitmap(BitmapFactory.decodeFile(mPicturePath)); 
        imgBtn.refreshDrawableState(); 
        break; 
       case 3: 
        imgBtn.setImageBitmap(BitmapFactory.decodeFile(mPicturePath)); 
        imgBtn.refreshDrawableState(); 
        break; 
       case 4: 
        imgBtn.setBackgroundResource(R.drawable.sample_4); 
        imgBtn.refreshDrawableState(); 
        break; 
      } 

    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.edit_creations, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

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

     if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA}; 

      Cursor cursor = getContentResolver().query(selectedImage, 
        filePathColumn, null,null,null); 
      cursor.moveToFirst(); 

      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      mPicturePath = cursor.getString(columnIndex); 
      cursor.close(); 

      imgBtn.setImageBitmap(BitmapFactory.decodeFile(mPicturePath)); 

      imgBtn.refreshDrawableState(); 
      // String picturePath contains the path of 
      // selected image 
     } 
    } 

    protected void onPause() { 
     super.onPause(); 

     //need an editor object to make preference changes 
     // all objects are from android.context.Context 
     SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPref.edit(); 
     editor.putString("img_" + mPosition, mPicturePath); 

     editor.commit(); 
    } 

    protected void onResume() { 
     super.onResume(); 
     SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE); 
     mPicturePath = sharedPref.getString("img_" + mPosition, "img_" + mPosition); 
    } 
} 

回答

0

您正確使用SharedPreferences但你是不是配股代碼在正確的活動生命週期方法中。您正在閱讀onCreate()上的首選項並在onStop()上保存,因此也許您可以執行此操作,將首選項保存爲onPause()(以確保它更早保存),並在onResume()上重新加載,而不是onCreate()(後者僅在生命週期中出現一次一個活動)。

此外,您可能想要檢查Context.getSharedPreferences()是否會是更好的選擇,因爲它不僅僅是一個活動共享的。

+0

它仍然不起作用 – user3417966 2014-10-04 23:21:03

+0

沒關係。我忘了更新onResume中的圖像。它現在工作,謝謝! – user3417966 2014-10-04 23:29:26