Тост сообщение не всплывает при нажатии кнопки

Это код, все, что я хочу сделать, это проверить, если учетные данные пользователя введены в базу данных, а затем отобразить успех через тост сообщение, если они есть, и если они не должны возвращать сообщение об ошибке.

Вот то, что я узнал на одном из веб-сайтов, я следовал всем инструкциям и получил код ниже, но тост все еще не появляется.

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.

0

Решение

Если вы хотите показывать тост в случае успеха или неудачи при использовании asyntask, используйте toast в методе onPostExcute () asynctask.

0

Другие решения

Сначала убедитесь, что строка для показа тоста выполняется.
Вы можете использовать класс Log, чтобы напечатать какое-нибудь сообщение, чтобы убедиться, что происходит в вашем приложении.

0

изменить эту строку

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

с:

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

Надеюсь, поможет

0

использование getContext или же mainActivity.this вместо mainActivity

0

Вы не можете быть уверены, что ваша активность находится в допустимом состоянии из фонового потока. Поэтому вместо передачи активности передайте в контексте приложения, например, так:

public signInAsync(Context appContext)

А затем сделайте:

Toast.MakeText(appContext,...

Поэтому, когда вы вызываете signInAsync из действия, вы будете называть это так:

signInAsync(this.ApplicationContext)
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector