![](/img/trans.png)
[英]System.IndexOutOfRangeException: 'Index was outside the bounds of the array.' in xamarin App
[英]Xamarin Android with Mysql DataAdapter gives an Array Error System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'
我有一個 Xamarin Android 項目,我想要使用 ListView 和 mysql 的 output 數據庫表。
與數據庫的連接有效,但一旦數組將數據傳遞給 ListView 適配器,我就會收到錯誤:System.IndexOutOfRangeException:'索引超出數組范圍'。
數據庫有 8 行 (id,itemName,itemPrice,itemsBought,usedGold,user,seller,timestamp)
那是我的 activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
</RelativeLayout>
那是我的 Constants.cs(xxx 作為占位符):
namespace NTA_Mobile
{
public static class Constants
{
#region Fields
public static string connectionString = ("server=xxx;user id=xxx;password=xxx;persistsecurityinfo=True;database=xxx;");
public static string selectAllQueryHistory = "select * from boughtitemhistory order by id desc";
#endregion Fields
}
}
這是我的 MainActivity.cs:
using Android.App;
using Android.OS;
using Android.Runtime;
using Android.Widget;
using AndroidX.AppCompat.App;
using MySqlConnector;
using System.Collections;
namespace NTA_Mobile
{
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
#region Fields
private ArrayList data = new ArrayList();
private ListView listView1;
#endregion Fields
#region Public Methods
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
#endregion Public Methods
#region Protected Methods
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
listView1 = FindViewById<ListView>(Resource.Id.listView1);
LoadData();
}
#endregion Protected Methods
#region Private Methods
private async void LoadData()
{
MySqlConnection conn = new MySqlConnection(Constants.connectionString);
await conn.OpenAsync();
MySqlCommand cmd = new MySqlCommand(Constants.selectAllQueryHistory, conn);
cmd.Connection = conn;
MySqlDataReader rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{
while (rdr.Read())
{
data.Add(rdr[1]);
}
rdr.Close();
listView1.Adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, data);
}
}
#endregion Private Methods
}
}
我嘗試像 Microsoft 文檔中那樣使用 string[],但它也不起作用。 我嘗試只用一行,因為我雖然這樣會更容易,但最后它應該顯示所有行。
在我的例子中,我使用了通過 Nuget 安裝的 Bradley Grainger 的 MySqlConnector,我不得不改變
private async void LoadData()
{
MySqlConnection conn = new MySqlConnection(Constants.connectionString);
await conn.OpenAsync();
到
private void LoadData()
{
MySqlConnection conn = new MySqlConnection(Constants.connectionString);
conn.Open();
現在它按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.