Я разрабатываю C#
Android, который принимает пользовательский ввод и добавляет его в базу данных, затем в другом действии он отображает пользовательский ввод с возможностью снова редактировать его ввод.
Итак, у меня есть 2 занятия и 1 открытый класс, который связывает их вместе. Я использую SQLLite для сохранения пользовательского ввода в базе данных (в MainActivity.cs
), а затем (в secondActivity
) извлекает сохраненное значение (которое является вводом пользователя) из публичной базы данных (расположенной в публичном классе, называемом Class1
) и отображает его в виде Textview
.
Class1.cs
namespace App
{
public class Class1
{
public static string dpPath= Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "user.db3");
public void Insert(string Quantity, string name)
{
var db = new SQLiteConnection(Class1.dpPath);
var logintable = new LoginTable();
logintable.quantity = Quantity;
logintable.name = name;
db.Insert(logintable);
}
public void edit(string Quantity)
{
var db = new SQLiteConnection(Class1.dpPath);
var logintable = new LoginTable();
logintable.quantity = Quantity;
db.Update(logintable);
}
public void delete(int id)
{
var db = new SQLiteConnection(Class1.dpPath);
var logintable = new LoginTable();
logintable.id = id;
db.Delete(logintable);
}
public Class1()
{
//Creating database, if it doesn't already exist
if (!File.Exists(Class1.dpPath))
{
var db = new SQLiteConnection(Class1.dpPath);
db.CreateTable<LoginTable>();
}
}
public class LoginTable
{
[PrimaryKey, AutoIncrement, Column("_Id")]
public int id { get; set; } // AutoIncrement and set primarykey
[MaxLength(25)]
public string quantity { get; set; }
[MaxLength(15)]
public string name { get; set; }
public LoginTable()
{
}
}
}
MainActivity.cs
Class1 cl = new Class1():
cl.Insert(input.ToString(), name.ToLower());
SecondActivity.cs
Class1 cl = new Class1():
cl.edit(input.ToString());
var db = new SQLiteConnection(Class1.dpPath);
var table = db.Table<Class1.LoginTable>();
foreach( var item in table) {
textView.Text += item.name + " " + item.quantity;
}
Ну, я получаю textview
в secondActivity
, вход, который был введен в первый раз (в MainActivity
), а не тот, который был отредактирован позже в SecondActivity
. Я подумал, что, может быть, потому что я создал два разных экземпляра Class1
, и каждый из них работает со своей таблицей. Кроме того, я попытался инициализировать публичный статический экземпляр Class1
внутри самого Class1
следующим образом:
открытый класс Class1 {открытый статический Class1 cl = новый Class1 (); }
но не сработало, textview
по-прежнему отображает исходный ввод, а не отредактированный. Мне нужно иметь возможность редактировать базу данных от каждого актива .. Пожалуйста, помогите мне найти решение.
UPDATE
Я создал новый класс Class2
, и внутри него я инициализировал новый экземпляр Class1
, например:
public class Class2
{
public static Class1 cl = new Class1();
}
А потом я попытался получить доступ к этому экземпляру class1 в Main и Second Activity, поэтому в Main мой код:
Class2.cl.Insert(input.ToString(), name.ToLower());
и во втором упражнении мой код:
Class2.cl.edit(input.ToString());
var db = new SQLiteConnection(Class1.dpPath);
var table = db.Table<Class1.LoginTable>(); // The issue is in this line
foreach( var item in table) {
textView.Text += item.name + " " + item.quantity;
}
Так что теперь проблема, я думаю, в secondActivity
, var table
получает только одну таблицу, в которой хранится исходный вход в основном действии, и при обновлении значения во втором действии, это не касается второй таблицы, в которой хранятся отредактированные данные. Но все же я не знаю, как это решить.