Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SharedReferences保存arraylist并在listview中显示_Java_Android - Fatal编程技术网

Java 使用SharedReferences保存arraylist并在listview中显示

Java 使用SharedReferences保存arraylist并在listview中显示,java,android,Java,Android,我有两项活动。我想从Note.java获取edittext数据,并将其放在MainActivity.java的listview中。 但是我不能用列表的形式 Note.java public class Note extends FragmentActivity implements EditText editText,editText2; @Override protected void onCreate(Bundle savedInstanceState) {

我有两项活动。我想从Note.java获取edittext数据,并将其放在MainActivity.java的listview中。 但是我不能用列表的形式

Note.java

  public class Note extends FragmentActivity implements


EditText editText,editText2;


@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_note);



    editText = (EditText)findViewById(R.id.editText);



SharedPreferences sharedPref = getSharedPreferences("note", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPref.edit();

        editor.putString("myKey", editText.getText().toString());
        editor.commit();
  }
public class MainActivity extends AppCompatActivity{

ListView listView;
List list;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listView = (ListView) findViewById(R.id.listView);

  SharedPreferences sharedPref = getSharedPreferences("note", Context.MODE_PRIVATE);
    String baslik = sharedPref.getString("myKey",null);

    list = new ArrayList<String>();

    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1,list);
    list.add(baslik);
    listView.setAdapter(arrayAdapter);
    arrayAdapter.notifyDataSetChanged();

}
MainActivity.java

  public class Note extends FragmentActivity implements


EditText editText,editText2;


@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_note);



    editText = (EditText)findViewById(R.id.editText);



SharedPreferences sharedPref = getSharedPreferences("note", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPref.edit();

        editor.putString("myKey", editText.getText().toString());
        editor.commit();
  }
public class MainActivity extends AppCompatActivity{

ListView listView;
List list;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listView = (ListView) findViewById(R.id.listView);

  SharedPreferences sharedPref = getSharedPreferences("note", Context.MODE_PRIVATE);
    String baslik = sharedPref.getString("myKey",null);

    list = new ArrayList<String>();

    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1,list);
    list.add(baslik);
    listView.setAdapter(arrayAdapter);
    arrayAdapter.notifyDataSetChanged();

}
public类MainActivity扩展了AppCompatActivity{
列表视图列表视图;
名单;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(listView)findViewById(R.id.listView);
SharedReferences SharedReferences=GetSharedReferences(“注意”,Context.MODE\u PRIVATE);
String baslik=sharedPref.getString(“myKey”,null);
列表=新的ArrayList();
ArrayAdapter ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,list);
列表。添加(巴斯利克);
setAdapter(arrayAdapter);
arrayAdapter.notifyDataSetChanged();
}

SharedReferences
只能存储基本数据类型。您不能在
SharedReferences
中存储引用类型。对于这种情况,我使用
Gson

步骤1:将列表转换为字符串

Gson g = new Gson();
String str  = g.toJson(list);
步骤2:将字符串存储在
SharedReferences

要从
SharedReferences
获取数据,必须按如下方式反序列化字符串:

Gson g = new Gson();
Type type = new TypeToken<ArrayList<YourClass>>(){}.getType();
List<YourClass> clazz = g.fromJson(yourString,type);
Gson g=new Gson();
Type Type=new-TypeToken(){}.getType();
List clazz=g.fromJson(您的字符串,类型);

假设您要按SharedReferences保存和加载列表:

public static final String NEWS = "news";
 private SharedPreferences mPreferences;

public void saveNews(List<ResponseNews> news) {
    mPreferences.edit().putString(NEWS, new Gson().toJson(news)).commit();
}

public List<ResponseNews> loadNews() {
    return new Gson().fromJson(mPreferences.getString(NEWS, ""), new TypeToken<List<ResponseNews>>() {
    }.getType());
}
公共静态最终字符串NEWS=“NEWS”;
私人共享参考文献;
公共新闻(列表新闻){
mPreferences.edit().putString(NEWS,new Gson().toJson(NEWS)).commit();
}
公共列表loadNews(){
返回新的Gson(){
}.getType());
}

Hi Elbis,欢迎来到StackOverflow!您必须更好地解释您的代码发生了什么,您的应用程序正在崩溃或出现错误?发布错误日志。我看到您正试图解决SharedReferences的问题,这是必要的,还是您不知道该怎么做?谢谢@Shermano。我没有收到错误,但应用程序是crashing。不需要共享参考。我不知道怎么做。