Android SharedPreferences问题 - 从另一个类获取数据

时间:2013-04-24 22:03:40

标签: java android android-preferences

我正在尝试在不使用Intent的情况下传递数据,以便某些类可以访问数据。所以我决定使用SharedPreferences。当我运行代码时,我在End()方法中有一个Toast,显示我在Start()方法中设置的url。 toast显示我的默认消息,但不显示我存储在SharedPreferences中的url。

以下是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);
}

}

以下是End()方法的代码:

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

基本上我想做的就是从另一个类中获取数据而不必跟踪它并在我可以使用另一个类时传递它。

我做错了什么?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

Start替换

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

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);

修改

刚刚意识到!您没有设置trackUri变量。

sharedPref.getString("track_uri", trackUri);

应该是

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

注意:如果您只是尝试传递String,则可以将其添加到Start中的Intent extras。 E.g。

intent.putExtra("track_uri", trackUri);

然后在结束时检索:

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