2013-04-24 89 views
0

我試圖傳遞數據而不使用Intents,以便某些類可以訪問數據。所以我決定使用SharedPreferences。當我運行代碼時,我在End()方法中有一個Toast顯示我在Start()方法中設置的url。吐司顯示我的默認消息,但不顯示我已存儲在SharedPreferences中的URL。Android SharedPreferences問題 - 從另一個類獲取數據

下面是Start()方法的代碼:

import java.net.URI; 
import java.net.URISyntaxException; 

import android.content.Intent; 
import android.content.SharedPreferences; 
import android.app.Activity; 
import android.widget.Toast; 
import android.net.Uri; 
import android.os.Bundle; 

public class Start extends Activity { 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    String uriStr = "http://www.google.com"; 
    URI uri = null; 

    try { 
     uri = new URI(uriStr); 
    } catch (URISyntaxException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    String trackUri = uri.toString(); 
    SharedPreferences sharedPref = getSharedPreferences("FileName", MODE_PRIVATE); 
    SharedPreferences.Editor prefEditor = sharedPref.edit(); 
    prefEditor.putString("track_uri", trackUri); 
    prefEditor.commit(); 
    Intent intent = new Intent(getBaseContext(), End.class); 
    startActivity(intent); 
} 

}

下面是完()方法的代碼:基本上所有欲

import java.net.URI; 
import java.net.URISyntaxException; 

import android.content.Context; 
import android.content.SharedPreferences; 
import android.app.Activity; 
import android.widget.Toast; 
import android.net.Uri; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 

public class End extends Activity { 
private Context mContext; 

public End() { 
} 

public End (Context context) { 
    mContext = context; 
} 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mContext = getApplicationContext(); 
    String trackUri = "Test"; 
    //SharedPreferences sharedPref = getSharedPreferences("FileName", MODE_PRIVATE); 
    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(mContext); 
    sharedPref.getString("track_uri", trackUri); 
    Toast.makeText(getApplicationContext(), trackUri, Toast.LENGTH_LONG).show(); 
} 
} 

do是從另一個類獲取數據,而不必跟蹤它並在我可以使用另一個類時使用Intents傳遞它。

我在做什麼錯?任何幫助表示讚賞。

+0

看到我更新的答案。 – 2013-04-25 10:45:37

回答

1

Start

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 

編輯替換

SharedPreferences sharedPref = getSharedPreferences("FileName", MODE_PRIVATE); 

剛剛意識到!你沒有設置trackUri變量。

sharedPref.getString("track_uri", trackUri); 

應該

trackUri = sharedPref.getString("track_uri", trackUri); 

注意:如果你只是想傳遞字符串,你可以將其添加到啓動意圖演員。例如。

intent.putExtra("track_uri", trackUri); 

然後檢索結束:

String uriString = getIntent().getStringExtra("track_uri"); 
+0

好地方。我甚至沒有注意到這一點。 – Simon 2013-04-24 22:14:25

+0

我試過了。它仍然給我「測試」字符串,而不是url – user268397 2013-04-24 22:14:51

+0

@ user268397查看更新的答案。 – 2013-04-25 01:40:55