Konvertierung von "System.Collections.Generic.List<string>" in "GroceryList.Item[]" nicht möglich.



  • Hallo zusammen.

    Ich versuche, Daten von einem externen MS-SQL-Server auf einer App darzustellen (Xamarin.Android). Dazu habe ich im .xaml-File folgenden ListView eingefügt:

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listView3" />
    

    Die Aktivität hierzu sieht folgendermaßen aus:

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.layout1);
    
        var lv = FindViewById<ListView>(Resource.Id.listView3);
    
        lv.Adapter = new ArrayAdapter<Item>(this, Android.Resource.Layout.SimpleListItem1, Android.Resource.Id.Text1, BaseData.GetEmployees());
        lv.ItemClick += OnItemClick;
    }
    
    void OnItemClick(object sender, AdapterView.ItemClickEventArgs e)
    {
        int position = e.Position; // e.Position is the position in the list of the item the user touched
    
        var intent = new Intent(this, typeof(DetailsActivity));
    
        intent.PutExtra("ItemPosition", position);
    
        StartActivity(intent);
    }
    

    und die get-Methode:

    public static List<String> GetEmployees()
    {
        List<String> list = new List<String>();
    
        string sql = "SELECT adrsuche1 FROM adressen";
    
        using (SqlConnection con = new SqlConnection(connectionString))
        {
            con.Open();
    
            using (SqlCommand cmd = new SqlCommand(sql, con))
            {
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        list.Add(reader.GetString(0));
                    }
                }
            }
    
            con.Close();
    
            return list;
        }
    }
    

    Die Spalte in der Datenbank, die mit dem SQL-Befehl anzusprechen versucht wird, enthält einfache strings.

    Leider unterringelt er mir BaseData.GetEmployees() (Activity Zeile 8 ) und ich erhalte folgende Fehlermeldung:

    Konvertierung von "System.Collections.Generic.List<string>" in "GroceryList.Item[]" nicht möglich.

    Kann mir jemand vielleicht sagen, was das Problem ist und wie ich das lösen kann, sodass die Daten von der Datenbank korrekt angezeigt werden?

    Vielen Dank schonmal,

    Beste Grüße


  • Administrator

    Du willst eine Liste einem Array-Parameter übergeben. Du musst zuerst die Liste in ein Array umwandeln. Dazu bietet List<T> die Methode ToArray an. Allerdings hast du dann noch das Problem, dass du ein String-Array einem Item-Array übergeben möchtest. Keine Ahnung was diese Item-Klasse genau soll. Oder sollte womöglich dort statt ArrayAdaptery<Item> eher ArrayAdapter<String> stehen?

    Aber mal ehrlich, hol nochmal das Grundlagenbuch/Tutorial/was auch immer zu C# raus. Das sind absolute Grundlagen. Les dir nochmal die Sektion über Typen durch.



  • Hm habe jetzt die entsprechende Zeile in

    lv.Adapter = new ArrayAdapter<String>(this, Android.Resource.Layout.SimpleListItem1, Android.Resource.Id.Text1, BaseData.GetEmployees().ToArray());
    

    geändert, jetzt sagt er mir:

    Konvertierung von "string[]" in "GroceryList.String[]" nicht möglich.

    Sorry für diese Grundlagen-Fragen, bin leider absoluter Anfänger, was Programmieren angeht 😞


  • Administrator

    @tbmsam sagte

    Sorry für diese Grundlagen-Fragen, bin leider absoluter Anfänger, was Programmieren angeht 😞

    Wieso beschäftigst du dich dann bereits mit Xamarin? Lern doch zuerst mal die Grundlagen, bevor du dich mit fortgeschritteneren Themen auseinander setzt.

    Bezüglich der Fehlermeldung. Das klingt als käme ein eigener String Datentyp zum Einsatz im Namensraum GroceryList? Ist das eine Übungsaufgabe?



  • Äh naja, ich beschäftige mich mit Xamarin, da ich von meinem Arbeitgeber den Auftrag habe, eine spezielle Android-App mit Hilfe von Microsoft Visual Studio 2017 zu erstellen.

    Was meinst du mit "klingt als käme ein eigener String Datentyp zum Einsatz"?^^
    Ich versuche, die App, die ich über das Tutorial "https://university.xamarin.com/classes/track/xamarin-android#and102-activities-intents" erstellt habe, zu modifizieren und an die Infrastruktur meines Arbeitgebers anzupassen (speziell wie geschrieben Daten einer externen MS-SQL-Server 2012-Datenbank auszulesen und anzuzeigen).



  • Dann entferne mal das ToArray() wieder.
    Und finde mal raus, was GroceryList.String ist.

    Ich muß aber @Dravere zustimmen: Du solltest erst die Grundlagen von C# (z.B. anhand einer Konsolen-Anwendung) lernen, bevor du dich mit Xamarin beschäftigst.



  • Habe mein ganzes Projekt jetzt durchforstet, aber konnte leider nirgends GroceryList.string finden.

    Habe in meinem Studium Java gehabt und über Tutorials bereits eine Konsolen-Anwendung geschrieben, in der der Datenbankzugriff sowie das Darstellen der Daten wunderbar funktioniert hat:

        static void Main(string[] args)
        {
            SqlConnection connection = new SqlConnection("Server=.\[servername];Database=[dbname];User Id=[userid];Password=[password];");
            connection.Open();
            SqlCommand cmd = new SqlCommand("SELECT adrsuche1 FROM [dbo].[Adressen]", connection);
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                Console.WriteLine("{0}",reader.GetString(0));
            }
            reader.Close();
            connection.Close();
    
            if (Debugger.IsAttached)
            {
                Console.ReadLine();
            }
    

    Nur krieg ich den Transfer nicht ganz hin. Leider gibt es beispielsweise die Funktion Console.WriteLine() in einer App bzw. bei Xamarin nicht, daher nach einiger Recherche / diversen anderen Versuchen der Versuch jetzt mit dem ListView - Element.