簡體   English   中英

Xamarin Android 和 Mysql DataAdapter 給出了一個數組錯誤 System.IndexOutOfRangeException:“索引超出了數組的范圍。”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM