问题描述
我将Visual Studio Xamarin Forms与C#结合使用,我从API和服务器上的数据库中获取数据。我测试了一个apk,它工作正常。
当它停止工作时: 现在,我做了一些更改,因为我的应用程序必须模拟没有互联网连接时的工作方式,因此我使用nuget sqlite-net-pcl实现了sqlite。因此,当我的应用程序具有Internet连接时,该应用程序会将一些值存储在本地数据库中,并且在任何时候如果没有检测到互联网将访问本地数据库中的最新信息。我一直在使用通过USB连接的手机进行测试,效果很好。
问题: 因此,我再次创建了Apk文件,安装后显示了我的主页,甚至显示了带有API数据的选择器,但是当我单击第一个按钮时,它崩溃了,或者只是关闭了,没有任何消息。
我的代码:我不知道在这里真正有用的是什么,但是基本上这是我的本地数据库连接(此代码行出现在每个页面中):
private sqliteConnection db = new sqliteConnection(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),"LocalDB.db3"));
private void InsertPisteroslocal()
{
//first delete table data
//db.Deleteall<T_Pisteros>();
db.DropTable<T_Pisteros>();
db.CreateTable<T_Pisteros>();
foreach (var item in PisterosLista)
{
var DatosRegistro = new T_Pisteros
{
PisteroID = item.PisteroID,PisteroN = item.PisteroN
};
var num = db.Insert(DatosRegistro);
}
}
public void GetPisteroslocal()
{
try
{
db.CreateTable<T_Pisteros>();
List<T_Pisteros> PisterosLista = new List<T_Pisteros>();
PisterosLista = db.Table<T_Pisteros>().ToList();
pck_Pisteros.ItemsSource = PisterosLista;
}
catch (Exception)
{
throw;
}
}
这是清单(再次我不知道是否可以提供任何帮助):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.gearsofsoftware.servlottery" android:installLocation="auto">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<application android:label="Premios Servicentro" android:icon="@mipmap/icon"></application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>
我真的在祈祷有人可以在这里帮助我,我觉得这对我来说是死胡同,我不知道该怎么办:(
解决方法
安装ADB和运行的logcat
以下是日志:https://pastebin.com/304eFXMq
基本上,关键是: “ SQLite.SQLiteException:没有这样的表:T_Promo”
我认为当时无需对本地数据库进行任何调用,而是从第二页开始(崩溃时)开始进行调用,并且此调用具有以下代码:
+---------+-------+---------------+
| Field1 | Field | countOfFields |
+---------+-------+---------------+
| Value_A | 0 | 19 |
| Value_A | 1 | 2 |
| Value_A | 12 | 4 |
| Value_A | 14 | 3 |
+---------+-------+---------------+
我将其更改为
db.DeleteAll<T_Promo>();
db.CreateTable<T_Promo>();
现在工作正常。