在 Xamarin Forms 中从 APK 安装时应用程序崩溃
App crashed when installed from APK in Xamarin Forms
应用从 APK 安装时崩溃,但从 Visual Studio 通过 USB 连接时运行正常。
我在 C# 中使用 Visual Studio Xamarin Forms,我从 API 和位于服务器上的数据库获取数据。我测试了一个 apk,它运行良好。
停止工作时:
现在我做了一些更改,因为我的应用程序必须在没有互联网连接时模拟同样的工作,所以我使用 nuget sqlite-net-pcl 实现了 SQLite。因此,当我的应用程序连接到互联网时,该应用程序将在本地数据库中存储一些值,并且如果在任何时候检测到没有互联网,它将去并从本地数据库中获取最新信息。我一直在使用通过 USB 连接的 phone 进行测试,效果很好。
问题:
因此,我再次创建了 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:没有这样的 table:T_Promo”
我认为此时不必调用本地数据库,在开始第二页时调用(当它崩溃时)并且此调用具有以下代码:
db.DeleteAll<T_Promo>();
db.CreateTable<T_Promo>();
我改成了
db.DropTable<T_Promo>();
db.CreateTable<T_Promo>();
现在工作正常。
应用从 APK 安装时崩溃,但从 Visual Studio 通过 USB 连接时运行正常。
我在 C# 中使用 Visual Studio Xamarin Forms,我从 API 和位于服务器上的数据库获取数据。我测试了一个 apk,它运行良好。
停止工作时: 现在我做了一些更改,因为我的应用程序必须在没有互联网连接时模拟同样的工作,所以我使用 nuget sqlite-net-pcl 实现了 SQLite。因此,当我的应用程序连接到互联网时,该应用程序将在本地数据库中存储一些值,并且如果在任何时候检测到没有互联网,它将去并从本地数据库中获取最新信息。我一直在使用通过 USB 连接的 phone 进行测试,效果很好。
问题: 因此,我再次创建了 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:没有这样的 table:T_Promo”
我认为此时不必调用本地数据库,在开始第二页时调用(当它崩溃时)并且此调用具有以下代码:
db.DeleteAll<T_Promo>();
db.CreateTable<T_Promo>();
我改成了
db.DropTable<T_Promo>();
db.CreateTable<T_Promo>();
现在工作正常。