2013-04-24 2 views
0

Я пытаюсь передать данные без использования намерений, чтобы определенные классы могли получить доступ к данным. Поэтому я решил использовать SharedPreferences. Когда я запускаю код, у меня есть Toast в методе End(), отображающий url, который я задал в методе Start(). Тост отображает мое сообщение по умолчанию, но не адрес, который я сохранил в SharedPreferences.Android SharedPreferences Issue - Получить данные из другого класса

Вот код для метода 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(); 
} 
} 

В принципе все, что я хочу do - получать данные из другого класса, не заставляя их отслеживать и передавать его с помощью намерений, когда я могу использовать другой класс.

Что я делаю неправильно? Любая помощь приветствуется.

+0

Смотрите мой обновленный ответ. –

ответ

1

В Start заменить

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

с

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 

EDIT:

Просто понял! Вы не устанавливаете переменную trackUri.

sharedPref.getString("track_uri", trackUri); 

должен быть

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

Примечание: Если вы просто пытаетесь передать строку, вы можете добавить его в Намерение дополнений в Start. Например.

intent.putExtra("track_uri", trackUri); 

Затем получить в Энде:

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

Хорошее место. Я этого даже не заметил. – Simon

+0

Я пробовал это. Он по-прежнему дает мне «тестовую» строку, а не URL-адрес – user268397

+0

@ user268397 См. Обновленный ответ. –

Смежные вопросы