2017-02-20 4 views
0

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

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

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

, пожалуйста, проверьте мой ответ –

ответ

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

если это поможет. Пожалуйста, отметьте это как правильный ответ, чтобы другие получили помощь от этого –

+0

Извините, но не работает, но спасибо. Я получаю 2 ошибки после того, как я перейду на. Идентификатор ожидается \t и «,» ожидается. – SWALLOW

+0

@SWALLOW, пожалуйста, проверьте мой обновленный ответ. и если вы получаете некоторую ошибку, не стесняйтесь спрашивать и делиться своим логарифмом, чтобы мы могли помочь вам в дальнейшем. –

0

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

0

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

0

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

0

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

public signInAsync(Context appContext) 

, а затем сделать:

Toast.MakeText(appContext,... 

Так что, когда вы звоните signInAsync от активности вы будете называть это так:

signInAsync(this.ApplicationContext) 
Смежные вопросы