Как создать и заполнить локальную базу данных SQLite данными API json? - PullRequest
0 голосов
/ 04 февраля 2020

Я создаю приложение Xamarin.Forms, которое будет использовать данные из API Rest, который я создал в C#.

Я пытаюсь сохранить все возвращенные данные JSON от API до локальной SQLite БД, тогда я буду использовать эти данные во всех интерфейсах приложения.

Пока все будет хорошо:

public async void GetProduct()
    {
        var httpClient = new HttpClient();
        var response = await httpClient.GetStringAsync("localhost/api/products");
        var product = JsonConvert.DeserializeObject<List<Product>>(response);

        lvProducts.ItemsSource = propriedade;

    }

Что я хочу это заполнить таблицу в локальной БД вместо заполнения ListView.

У вас есть какой-нибудь простой реализуемый код, который я могу использовать для достижения этой цели?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Мне нужно заполнить таблицу в локальной БД вместо заполнения ListView.

Согласно вашему описанию, вы получили List с использованием Api, теперь вы хотите создать локальную sqlite table и заполните этот список в этой таблице.

Во-первых, вам нужно установить sqlite- net -pcl с помощью пакета Nuget.

Затем создать одну базу данных sqlite. и Таблица продуктов, используя следующий код:

 public void createtable()
    {
        var fileName = "Productdata.db3";
        var documentPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
        var path = Path.Combine(documentPath, fileName);

        connection = new SQLiteConnection(path);
        connection.CreateTable<Product>();


    }

Наконец, foreach Перечислите данные и вставьте данные в таблицу продуктов Sqlite.

 private void Btn4_Clicked(object sender, EventArgs e)
    {
        var products = JsonConvert.DeserializeObject<List<Product>>(response);
        foreach(Product p in products)
        {
            Product prod = new Product();
            prod.productname = p.productname;
            var data = connection.Table<Product>();

            var d1 = data.Where(x => x.productname == prod.productname).FirstOrDefault();
            if (d1 == null)
            {
                connection.Insert(prod);
                Console.WriteLine("Sucessfully Added");
            }
            else
            {
                Console.WriteLine("Already Mail id Exist");
            }
        }
    }

Вот класс продуктов:

public class Product
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string productname { get; set; }

}

Вот статья о вставке данных в локальную базу данных sqlite, которую вы можете посмотреть:

https://www.c-sharpcorner.com/article/working-with-sqlite-in-xamarine-forms-application/

0 голосов
/ 04 февраля 2020

Если все, что вы хотите сделать, это сохранить данные и отобразить их (как следует из вашего поста), тогда вам просто нужно использовать monkey-cache , чтобы выполнить тяжелую работу. Он разработан специально для решения этой проблемы.

В противном случае вам нужно будет взглянуть на реализацию локального доступа к данным и написание собственного кода доступа к данным. Эта ссылка поможет вам начать с этого.

...