0

您好我需要從一個活動獲取一個字符串到另一個類。我需要Test2類中的字符串VideoID。我想使用sharedpreferences,但這不起作用。我如何在這裏使用sharedpreferences?或者任何其他的想法如何我可以得到字符串?由於SharedPreferences在非活動

在我的活動我有這個按鈕:

// Video Button 
final Button videobutton = (Button) findViewById(R.id.videobutton); 
videobutton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      // Video ID save 
      SharedPreferences.Editor editor = getSharedPreferences("VideoID_saver", MODE_PRIVATE).edit(); 
      editor.putString("VideoID", current_video); 
      editor.commit(); 

      Intent OpenTest = new Intent(Questions.this, Test2.class); 
      startActivity(OpenTest); 
     } 
    }); 

的Test2.class看起來是這樣的:

import android.content.SharedPreferences; 
 
import android.os.Bundle; 
 
import android.view.View; 
 
import android.widget.Button; 
 
import android.widget.TextView; 
 
import android.widget.Toast; 
 
import com.google.android.youtube.player.YouTubeBaseActivity; 
 
import com.google.android.youtube.player.YouTubeInitializationResult; 
 
import com.google.android.youtube.player.YouTubePlayer; 
 
import com.google.android.youtube.player.YouTubePlayer.ErrorReason; 
 
import com.google.android.youtube.player.YouTubePlayer.PlaybackEventListener; 
 
import com.google.android.youtube.player.YouTubePlayer.PlayerStateChangeListener; 
 
import com.google.android.youtube.player.YouTubePlayer.Provider; 
 
import com.google.android.youtube.player.YouTubePlayerView; 
 

 
public class Test2 extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener { 
 
    public static final String API_KEY = "AIzaSyCb2pCHbqhBDKaYzFvU7g1SBG14YrM3XWE"; 
 

 
    //Test 
 
    SharedPreferences prefs = getSharedPreferences("VideoID_saver", MODE_PRIVATE); 
 
    String testtext = prefs.getString("VideoID", ""); 
 

 
    //http://youtu.be/<VIDEO_ID> 
 
    public final String VIDEO_ID = testtext; 
 

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

 
     /** Initializing YouTube player view **/ 
 
     YouTubePlayerView youTubePlayerView = (YouTubePlayerView) findViewById(R.id.youtube_player); 
 
     youTubePlayerView.initialize(API_KEY, this); 
 
    } 
 

 
    @Override 
 
    public void onInitializationFailure(Provider provider, YouTubeInitializationResult result) { 
 
     Toast.makeText(this, "Failured to Initialize!", Toast.LENGTH_LONG).show(); 
 
    } 
 

 
    @Override 
 
    public void onInitializationSuccess(Provider provider, YouTubePlayer player, boolean wasRestored) { 
 
     /** add listeners to YouTubePlayer instance **/ 
 
     player.setPlayerStateChangeListener(playerStateChangeListener); 
 
     player.setPlaybackEventListener(playbackEventListener); 
 

 
     /** Start buffering **/ 
 
     if (!wasRestored) { 
 
      player.cueVideo(VIDEO_ID); 
 
     } 
 
    } 
 

 
    private PlaybackEventListener playbackEventListener = new PlaybackEventListener() { 
 

 
     @Override 
 
     public void onBuffering(boolean arg0) {} 
 

 
     @Override 
 
     public void onPaused() {} 
 

 
     @Override 
 
     public void onPlaying() {} 
 

 
     @Override 
 
     public void onSeekTo(int arg0) {} 
 

 
     @Override 
 
     public void onStopped() {} 
 

 
    }; 
 

 
    private PlayerStateChangeListener playerStateChangeListener = new PlayerStateChangeListener() { 
 

 
     @Override 
 
     public void onAdStarted() {} 
 

 
     @Override 
 
     public void onError(ErrorReason arg0) {} 
 
    
 
     @Override 
 
     public void onLoaded(String arg0) {} 
 

 
     @Override 
 
     public void onLoading() {} 
 

 
     @Override 
 
     public void onVideoEnded() {} 
 

 
     @Override 
 
     public void onVideoStarted() {} 
 
    };

+0

你需要一個loadPreferences調用來獲取SharedPreferences。 – durbnpoisn

+0

以及這個loadPreferences調用的外觀如何?我找不到那個 –

+0

呃,沒關係。我錯過了。我現在看到你的閱讀和寫作設置正確。上次我做了這個,我寫了一個名爲LoadPreferences的函數。但是看代碼,它基本上和你所擁有的一樣。 – durbnpoisn

回答

1

你可能會莫名其妙地訪問不同的SharedPreferences實例。它更容易,以確保這種情況不會發生使用getDefaultSharedPreferences()方法:

在你的活動:

PreferenceManager.getDefaultSharedPreferences(this) 
    .edit() 
    .putString("VideoID", current_video) 
    .apply(); 

在你的Test2 onCreate方法:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
String testtext = prefs.getString("VideoID", ""); 
+0

你忘了申請你的交易。 PreferenceManager.getDefaultSharedPreferences(this).edit()。putString(「VideoID」,current_video).apply();' – SemaphoreMetaphor

+0

是的...好的。更新! – Jahnold

+0

謝謝,這不是最終的解決方案,但「onCreate」Methode的提示已經開始了。 SharedPreferences似乎只在onCreate方法中起作用。 –

0

夫婦的事情。 Test2繼承了它看起來很活躍的一個活動,所以不知道爲什麼你的標題說非活動。 SharedPreferences讀取和寫入似乎沒問題,但可能在活動的構造函數更改爲運行之前閱讀共享首選還爲時尚早。

0

你的目標是從按鈕獲取一個字符串到test2.似乎最好避免共享首選項,並直接通過put/getExtra函數將字符串傳遞給下一個活動。

像這樣:

Intent OpenTest = new Intent(Questions.this, Test2.class); 
i.putExtra("VideoID", current_video); 
startActivity(OpenTest); 

然後從你的新活動在OnCreate方法提取它:

//http://youtu.be/<VIDEO_ID> 
public final String VIDEO_ID; 

@ 
Override 
protected void onCreate(Bundle savedInstanceState) { 

//Test 
Intent intent = getIntent(); 
VIDEO_ID = intent.getExtras().getString("VideoID"); 

}