2013-04-24 69 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