簡體   English   中英

單擊按鈕時不會彈出吐司消息

[英]Toast message won't popup on button click

這是代碼,我要做的就是測試是否在數據庫中輸入了用戶憑據,然后通過Toast消息顯示成功,如果它們成功,以及是否不返回錯誤消息。

這是我在其中一個網站上找到的內容,我按照所有說明進行操作,最終顯示以下代碼,但吐司仍然沒有出現。

using Android.App;
using Android.Widget;
using Android.OS;
using Android.Views.InputMethods;
using Android.Content;
using Android.Views;
using System;
using System.Net;
using System.Collections.Specialized;
using Org.Json;
using System.Text;
namespace App
{
    [Activity(Label = "App", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity, Android.Views.View.IOnClickListener
    {
        EditText username, password;
        Button signIn;
        signInAsync sn;
        protected override void OnCreate(Bundle bundle)
        {

            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);
            initialize();
        }
        public void initialize()
        {
            username = (EditText)FindViewById(Resource.Id.editText1);
            password = (EditText)FindViewById(Resource.Id.editText2);
            signIn = (Button)FindViewById(Resource.Id.button1);
            signIn.SetOnClickListener(this);
        }
        public override bool OnTouchEvent(MotionEvent e)
        {
            InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
            EditText username = (EditText)FindViewById(Resource.Id.editText1);
            EditText password = (EditText)FindViewById(Resource.Id.editText2);
            //Cisti fokus
            username.ClearFocus();
            password.ClearFocus();
            //imm.HideSoftInputFromWindow(username.WindowToken, 0);
            return base.OnTouchEvent(e);
            //Sklanja tastaturu s ekrana na klik na pozadinu.
        }
        public void OnClick(View v)
        {
            switch (v.Id)
            {
                case Resource.Id.button1:
                    sn = new signInAsync(this);
                    sn.Execute();
                    break;
            }
        }
        public class signInAsync : AsyncTask
        {
            MainActivity mainActivity;

            public signInAsync(MainActivity mainActivity)
            {
                this.mainActivity = mainActivity;
            }
            string username, password;
            protected override void OnPreExecute()
            {
                base.OnPreExecute();

                username = mainActivity.username.Text;
                password = mainActivity.password.Text;
            }
            protected override Java.Lang.Object DoInBackground(params Java.Lang.Object[] @params)
            {

                WebClient client = new WebClient();
                client.UseDefaultCredentials = true;
                client.Proxy.Credentials = CredentialCache.DefaultCredentials;
                Uri uri = new Uri("http://192.168.1.198/android/login.php");
                NameValueCollection parameters = new NameValueCollection();
                parameters.Add("username", username);
                parameters.Add("password", password);
                var response = client.UploadValues(uri, parameters);
                var responseString = Encoding.UTF8.GetString(response);
                JSONObject ob = new JSONObject(responseString);
                if (ob.OptString("success").Equals("1"))
                {
                    mainActivity.RunOnUiThread(() =>
                    {
                        Toast.MakeText(mainActivity, "Uspješno ste se ulogovali", ToastLength.Short).Show();
                    });
                };
                if (ob.OptString("error").Equals("2"))
                    Toast.MakeText(mainActivity, "Pogresno", ToastLength.Short).Show();
                if (ob.OptString("error").Equals("3"))
                    Toast.MakeText(mainActivity, "Error", ToastLength.Short).Show();
                return null;
            }

        }
    }
}

這是我的PHP文件:

<?php
$db_name = "korisnici";
$mysql_username = "Mpro";
$mysql_password = "prolinet";
$server_name = "192.168.1.198";
$conn = mysqli_connect($server_name,$mysql_username,$mysql_password,$db_name);

if($conn) {
    echo "Connection success";
} else {
    echo "Faliure to connect";
}

if(isset($_POST['username']) && isset($_POST['password'])) {
    $user_name = $_POST['username'];
    $user_pass = $_POST['password'];
    $mysql_qry = "SELECT * FROM korisnici WHERE username = '$user_name' AND password = '$user_pass'";
    if(mysql_fetch_row($mysql_qry)){
        $response["success"] = 1;
        echo json_encode($response);

    } else{
        $response["error"]=2;
        echo json_encode($response);
    }

} else {
    $response["error"] = 3;
    echo json_encode($response);
}
?>

很抱歉打擾您,但我是Xamarin初學者。

改變這條線

Toast.MakeText(mainActivity, "Uspješno ste se ulogovali", ToastLength.Short).Show();

有:

Toast.MakeText(mainActivity.this, "Uspješno ste se ulogovali", ToastLength.Short).Show();

希望能幫助到你

如果要在使用asyntask時顯示成功或失敗的烤面包,請在asynctask的onPostExcute()方法中使用烤面包。

首先,確保顯示吐司的行已執行。 您可以使用Log類來打印一些消息,以確保應用程序中發生了什么。

使用getContextmainActivity.this代替mainActivity

您不能從后台線程確定您的活動處於有效狀態。 因此,與其像這樣在應用程序上下文中傳遞活動傳遞,不如說:

public signInAsync(Context appContext)

然后執行:

Toast.MakeText(appContext,...

因此,當您從活動中調用signInAsync時,您將像這樣調用它:

signInAsync(this.ApplicationContext)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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