Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.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 将数据从一个活动传递到另一个活动并保存_Java_Android_String_Android Listview_Android Sqlite - Fatal编程技术网

Java 将数据从一个活动传递到另一个活动并保存

Java 将数据从一个活动传递到另一个活动并保存,java,android,string,android-listview,android-sqlite,Java,Android,String,Android Listview,Android Sqlite,我有两个活动,每个活动都有一个列表视图。第一个包含数据,我希望另一个作为收藏夹列表。现在我可以有目的地传递数据,但它不会保存。当我启动intent时会显示,但当我退出第二个活动并使用自定义按钮返回时,listview中不会保存任何内容。请告诉我该怎么办。这是我的密码 public class MainActivity extends AppCompatActivity { DB_Sqlite dbSqlite; ListView listView; String fav

我有两个活动,每个活动都有一个列表视图。第一个包含数据,我希望另一个作为收藏夹列表。现在我可以有目的地传递数据,但它不会保存。当我启动intent时会显示,但当我退出第二个活动并使用自定义按钮返回时,listview中不会保存任何内容。请告诉我该怎么办。这是我的密码

public class MainActivity extends AppCompatActivity {

    DB_Sqlite dbSqlite;
    ListView listView;
    String fav_name;
    long fav_id;
    ArrayAdapter adapter;
    ArrayList arrayList;
    String[] number;
    Button button;
    StringResourcesHandling srh;
    Cursor getAllDataInCurrentLocale,getDataInCurrentLocaleById;
    SimpleCursorAdapter favourites_adapter,non_favourites_adapter;




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


        listView = (ListView) findViewById(R.id.list_view);
        SharedPreferences  mPrefs = getPreferences(MODE_PRIVATE);
        arrayList = new ArrayList<String>();
        listView.setAdapter(adapter);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, cc.class);
                startActivity(intent);
            }
        });






        /* Show the resources for demo */
        for (String s : StringResourcesHandling.getAllStringResourceNames()) {
            Log.d("RESOURCEDATA", "String Resource Name = " + s +
                    "\n\tValue = " + StringResourcesHandling.getStringByName(this, s)

            );

        }

        dbSqlite = new DB_Sqlite(this);
        Cursor csr = dbSqlite.getAllDataInCurrentLocale(this);
        DatabaseUtils.dumpCursor(csr);
        csr.close();





    }




    @Override
    protected void onDestroy() {
        super.onDestroy();
        getAllDataInCurrentLocale.close();

    }





    @Override
    protected void onResume() {
        super.onResume();
        manageNonFavouritesListView();




    }





    private void manageNonFavouritesListView() {
        getAllDataInCurrentLocale = dbSqlite.getAllDataInCurrentLocale(this);
        if (non_favourites_adapter == null) {
            non_favourites_adapter = new SimpleCursorAdapter(
                    this,
                    R.layout.textview,
                    getAllDataInCurrentLocale,
                    new String[]{FAVOURITES_COL_NAME},
                    new int[]{R.id.textview10},
                    0
            );
            listView.setAdapter(non_favourites_adapter);
            setListViewHandler(listView,false);
        } else {
            non_favourites_adapter.swapCursor(getAllDataInCurrentLocale);
        }
    }







    private void setListViewHandler(ListView listView, boolean favourite_flag) {
        if (!favourite_flag) {
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    if (i == 0) {
                        Intent intent = new Intent(MainActivity.this,tc.class);
                        startActivity(intent);
                    }
                    if (i == 1) {
                        Intent intent = new Intent(MainActivity.this,vc.class);
                        startActivity(intent);
                    }
                }
            });
            listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
                @Override
                public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long l) {
                    if (position == 0) {
                        Intent intent = new Intent(MainActivity.this, cc.class);
                        intent.putExtra("EXTRAKEY_ID",l); // THIS ADDED
                        startActivity(intent);}
                    String name = getAllDataInCurrentLocale.getString(getAllDataInCurrentLocale.getColumnIndex(FAVOURITES_COL_NAME));
                    Toast.makeText(MainActivity.this, name+" Added To Favorite", Toast.LENGTH_SHORT).show();

                    return true;
                }

            });

        }}




}
public类MainActivity扩展了AppCompatActivity{
DB_Sqlite dbSqlite;
列表视图列表视图;
字符串fav_名称;
长fav_id;
阵列适配器;
ArrayList ArrayList;
字符串[]编号;
按钮;
严格控制srh;
光标getAllDataInCurrentLocale,getDataInCurrentLocaleById;
SimpleCursorAdapter收藏夹适配器、非收藏夹适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(listView)findViewById(R.id.list\u视图);
SharedReferences mPrefs=getPreferences(模式\私有);
arrayList=新的arrayList();
setAdapter(适配器);
按钮=(按钮)findViewById(R.id.button);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意向意向=新意向(MainActivity.this,cc.class);
星触觉(意向);
}
});
/*显示用于演示的资源*/
对于(字符串s:StringResourcesHandling.getAllStringResourceNames()){
Log.d(“RESOURCEDATA”,“String Resource Name=“+s+
“\n\tValue=“+StringResourcesHandling.getStringByName(此,s)
);
}
dbSqlite=新的DB_Sqlite(本);
游标csr=dbSqlite.getAllDataInCurrentLocale(this);
DatabaseUtils.dumpCursor(csr);
csr.close();
}
@凌驾
受保护的空onDestroy(){
super.ondestory();
getAllDataInCurrentLocale.close();
}
@凌驾
受保护的void onResume(){
super.onResume();
ManageNonFavouriteListView();
}
私有void manageNonFavouriteListView(){
getAllDataInCurrentLocale=dbSqlite.getAllDataInCurrentLocale(this);
if(非收藏夹适配器==null){
非收藏夹适配器=新的SimpleCorsAdapter(
这
R.layout.textview,
getAllDataInCurrentLocale,
新字符串[]{favorites\u COL\u NAME},
新的int[]{R.id.textview10},
0
);
setAdapter(非收藏夹适配器);
setListViewHandler(listView,false);
}否则{
非收藏夹适配器.swapCursor(getAllDataInCurrentLocale);
}
}
私有void setListViewHandler(ListView ListView,布尔最爱\u标志){
如果(!收藏夹_标志){
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
如果(i==0){
意向意向=新意向(MainActivity.this,tc.class);
星触觉(意向);
}
如果(i==1){
意向意向=新意向(MainActivity.this,vc.class);
星触觉(意向);
}
}
});
setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
@凌驾
公共布尔值长单击(AdapterView父级、视图视图、整型位置、长l){
如果(位置==0){
意向意向=新意向(MainActivity.this,cc.class);
intent.putExtra(“EXTRAKEY_ID”,l);//添加了这个
星触觉(意图);}
字符串名称=getAllDataInCurrentLocale.getString(getAllDataInCurrentLocale.getColumnIndex(收藏夹名称));
Toast.makeText(MainActivity.this,name+“添加到收藏夹”,Toast.LENGTH_SHORT.show();
返回true;
}
});
}}
}
public类DB\u Sqlite扩展SQLiteOpenHelper{
公共静态最终字符串BDname=“data.db”;

public static final int DBVERSION=1;/*您可以在包含列表vew数据的db表中添加一列,如“IsFavorite”。当用户将listitem标记为Favorite时,将更改保存在db表中。当用户导航到Favorite列表时,使用select query中的Favorite筛选器从.db表填充列表。

我建议使用SharedReferences。您可以如果您创建多个键,则不会发生这种情况。 例如:

假设您有一个要从ClassA传递到ClassB的字符串数组列表:

A类:

for (int i = 0; i < list.size(); i++) {

    sharedPref.edit().putString("text" + i, "abcde").apply();
}
for(int i=0;i
B类:

for (int i = 0; i < list.size(); i++) {

    sharedPref.getString("text" + i, null);
}
for(int i=0;i

如果您的列表大小有问题,您也可以将列表大小传递给SharedReference并再次检索它。

我认为您需要实现一个数据库。或者如果您的数据很少,您可以使用SharedReferences@Paolo Colombo我有一个数据库,我尝试了SharedReferences它只保存一行,然后当我添加另一行时,它将替换第一行请删除DB_Sqlite,没有人使用它们。现在就使用房间。这是一个很好的建议,但你能举一个如何使用多个键的例子吗,非常感谢你。
public class StringResourcesHandling {
    private static final String[] allowedStringResourcePrefixes = new String[]{"db_"};
    private static boolean loaded = false;
    private static Field[] fields = R.string.class.getFields();
    private static ArrayList<String> allowedStringResourceNames = new ArrayList<>();

    private static void loadStringResources() {
        if (loaded) return;

        for (Field f: fields) {
            if (isResourceNameAllowedPrefix(f.getName())) {
                allowedStringResourceNames.add(f.getName());
            }
        }
        loaded = true;
    }

    private static boolean isResourceNameAllowedPrefix(String resourceName) {
        if (allowedStringResourcePrefixes.length < 1) return true;
        for (String s: allowedStringResourcePrefixes) {
            if (resourceName.substring(0,s.length()).equals(s)) return true;
        }
        return false;
    }

    public static String getStringByName(Context context, String name) {
        String rv = "";
        boolean nameFound = false;
        if (!loaded) {
            loadStringResources();
        }
        for (String s: allowedStringResourceNames) {
            if (s.equals(name)) {
                nameFound = true;
                break;
            }
        }
        if (!nameFound) return rv;
        return context.getString(context.getResources().getIdentifier(name,"string",context.getPackageName()));
    }

    public static List<String> getAllStringResourceNames() {

        if (!loaded) {
            loadStringResources();
        }
        return allowedStringResourceNames;
    }
}
for (int i = 0; i < list.size(); i++) {

    sharedPref.edit().putString("text" + i, "abcde").apply();
}
for (int i = 0; i < list.size(); i++) {

    sharedPref.getString("text" + i, null);
}