2016-08-20 2 views
0

Ich versuche, einen Button Click wie im Windows-Forum machen, aber ich mache etwas falsch, weil nichts auf der Konsole geschrieben wird, und der Text der Schaltfläche ändert sich nicht. Ich habe den Button-Text zu Testzwecken geändert. Auch ich bin mir bewusst, dass meine Methode für die Verbindung mit der SQL-Datenbank unsicher ist, jedoch ist diese Anwendung ausschließlich für den persönlichen Gebrauch und ab sofort Lernzwecke. Wie auch immer, hier ist mein Code:Xamarin-Taste klicken funktioniert nicht

Main.axml Code:

<Button 
android:text="Login" 
android:layout_width="match_parent" 
android:layout_height="0dp" 
android:layout_weight="15" 
android:background="@drawable/buttonstyle" 
android:id="@+id/buttonLogIn" 
android:layout_marginLeft="40dp" 
android:layout_marginRight="40dp" 
android:drawableLeft="@drawable/lockicon" 
android:textStyle="bold" 
android:textColor="#FFFFFF" /> 

MainActivity.cs Code:

using System; 
using Android.App; 
using Android.Widget; 
using Android.OS; 
using CryptSharp; 
using MySql.Data.MySqlClient; 
using System.Data; 

namespace App1 
{ 
    [Activity(Label = "TexByte", MainLauncher = true, Theme = "@android:style/Theme.Black.NoTitleBar.Fullscreen", Icon = "@drawable/Logo_Mob2")] 
    public class MainActivity : Activity 
    { 
     private EditText mtxtUsername, mtxtPassword; 
     private Button mBtnSignIn; 

     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 

      SetContentView(Resource.Layout.Main); 
      mBtnSignIn = FindViewById<Button>(Resource.Id.buttonLogIn); 
      mtxtUsername = FindViewById<EditText>(Resource.Id.txtUsername); 
      mtxtPassword = FindViewById<EditText>(Resource.Id.txtPassword); 
     } 
     private void mBtnSignIn_Click(object sender, EventArgs args) 
     { 
      MySqlConnection con = new MySqlConnection("Server=127.0.0.1;User Id=root;Password=password;Database=login;"); 
      try 
      { 
       string username = mtxtUsername.Text; 
       string password = mtxtPassword.Text; 

       if (con.State == ConnectionState.Closed) 
       { 
        con.Open(); 
        MySqlCommand cmd = new MySqlCommand("SELECT * FROM members WHERE username = '" + username + "' order by password "); 
        cmd.CommandType = CommandType.Text; 
        MySqlDataReader rdr = cmd.ExecuteReader(); 

        while (rdr.Read()) 
        { 

         string hash = string.Format("{0}", rdr["password"]); 
         Console.WriteLine(hash); 

         if (Crypter.CheckPassword(password, hash)) 
         { 
          Console.WriteLine("User name and Password Success "); 
          mBtnSignIn.Text = "Test"; 
         } 
         else 
         { 
          Console.WriteLine("Unable to process request. Verify username and password are correct."); 
          mBtnSignIn.Text = "Fail"; 
         } 
        } 
       } 
      } 
      catch(MySqlException ex) 
      { 
       Console.WriteLine("ERROR: Something went wrong. :(", ex.Message); 
      } 
      finally 
      { 
       con.Close(); 
      } 
     } 
    } 
} 
+0

Wo fügen Sie Ihrem 'Button' einen Event-Handler hinzu? Ich gehe nur aus früheren Erfahrungen mit C# + .Net. – ray

+0

Wenn ich mich nicht irre, wäre das das? mBtnSignIn = FindViewById

+0

Das findet nur das Schaltflächenobjekt. Ihr Schaltflächenobjekt muss angeben, welcher Code aufgerufen werden soll, um ein Ereignis, z. B. einen Klick, zu verarbeiten. Schau dir an, wie es in den Tutorials und Codebeispielen gemacht wird. – ray

Antwort

1

Sie benötigen eine Schaltfläche mBtnSignIn mit Ihrem Event-Handler mBtnSignIn_Click zu verbinden, dass die Prozesse Klicken Sie auf die Schaltfläche. Das passiert nicht einfach, durch Benennung muss man es von Hand machen.

Der einfachste Weg, dies zu tun, ist Ihre Schaltfläche Click Ereignis subscibing und fügen Sie Ihre Handler es:

protected override void OnCreate(Bundle bundle) 
{ 
    // ... 

    mBtnSignIn = FindViewById<Button>(Resource.Id.buttonLogIn); 
    mBtnSignIn.Click += mBtnSignIn_Click; 

    // ... 
} 
0

Es scheint, wie Sie auf Xamarin.Android arbeiten, ist alles außer fein, dass Sie nicht haben Der Schaltfläche wurde ein Ereignishandler hinzugefügt, der das Klickereignis behandelt. Es kann auf 3 einfache Arten geschehen.

ein von @robinmanuelthiel erwähnt wird hier die beiden anderen sind:

Mit dem Lambda Ausdruck:

mBtnSignIn.Click += (object o, EvenrArgs e) => { 
    //Write your Code.. 
}; 

die Delegate-Syntax:

mBtnSignIn.Click += delegate { 
    //Write your Code.. 
}; 

In Ihrem Fall ist es besser, wenn Sie den Eventhandler nur zu Ihrer Schaltfläche hinzufügen. Hier finden Sie weitere Hilfe und Codebeispiele https://developer.xamarin.com/.

Danke

Verwandte Themen