0

我试图在不使用 Intents 的情况下传递数据,以便某些类可以访问数据。所以我决定做的是使用 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();
}
}

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

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

4

1 回答 1

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

注意:如果你只是想传递字符串,你可以将它添加到 Start 中的 Intent extras 中。例如

intent.putExtra("track_uri", trackUri);

然后在 End 中检索:

String uriString = getIntent().getStringExtra("track_uri");
于 2013-04-24T22:13:20.853 回答