【问题标题】:How to show an exception message if the user doesn't check a radio button in Xamarin Android?如果用户未选中 Xamarin Android 中的单选按钮,如何显示异常消息?
【发布时间】:2018-03-29 07:49:18
【问题描述】:

您好,如果用户不选中单选按钮,我需要在屏幕上显示错误消息。在此代码中,有 13 个单选按钮分隔在 4 个单选组上。 我尝试使用 try/catch 和 if/else 但屏幕仍然没有显示 Toast 错误消息。 另一个疑问:我知道单选组不允许一个人选择超过 1 个选项,但我怎么能做一个允许用户只选择一个单选组的 1 个按钮的例外? 例如:现在我必须选择至少 4 个按钮(每个单选组中的 1 个),但我想以一种方式做到这一点,任何组中的一个就足够了

这里是代码

    using Android.App;
using Android.Content.PM;
using Android.Content.Res;
using Android.OS;
using Android.Support.V4.Widget;
using Android.Views;
using Android.Widget;
using System.Collections;
using Android.Support.V7.App;
using Android.Support.V4.View;
using Android.Support.Design.Widget;
using Auth0.OidcClient;
using Android.Content;
using IdentityModel.OidcClient;
using Android.Graphics;
using System.Net;
using System;
using Android.Runtime;
using Android.Text.Method;
using System.Text;
namespace whirlpoolapp
{
    [Activity(Label = "whirlpoolapp", MainLauncher = true)]
    [IntentFilter(
    new[] { Intent.ActionView },
    Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
    DataScheme = "whirlpoolapp.whirlpoolapp",
    DataHost = "lucasmoreira.auth0.com",
    DataPathPrefix = "/android/whirlpoolapp.whirlpoolapp/callback")]
    public class MainActivity : Activity
    {
        private ArrayList enderecos;
        TextView queroreconhecer;
        TextView crie;
        TextView conquiste;
        TextView entregue;
        TextView viva;
        TextView comentar;
        EditText comentário;
        Spinner spinner;
        ArrayAdapter adapter;
        RadioGroup rdgcrie;
        RadioGroup rdgconquiste;
        RadioGroup rdgentregue;
        RadioGroup rdgviva;
        Button enviar;
        private Auth0Client client;
        private AuthorizeState authorizeState;
        ProgressDialog progress;

        protected override void OnResume()
        {
            base.OnResume();

            if (progress != null)
            {
                progress.Dismiss();

                progress.Dispose();
                progress = null;
            }
        }

        protected override async void OnNewIntent(Intent intent)
        {
            base.OnNewIntent(intent);

            var loginResult = await client.ProcessResponseAsync(intent.DataString, authorizeState);

            var sb = new StringBuilder();
            if (loginResult.IsError)
            {
                sb.AppendLine($"An error occurred during login: {loginResult.Error}");
            }
            else
            {
                sb.AppendLine($"ID Token: {loginResult.IdentityToken}");
                sb.AppendLine($"Access Token: {loginResult.AccessToken}");
                sb.AppendLine($"Refresh Token: {loginResult.RefreshToken}");

                sb.AppendLine();

                sb.AppendLine("-- Claims --");
                foreach (var claim in loginResult.User.Claims)
                {
                    sb.AppendLine($"{claim.Type} = {claim.Value}");
                }
            }


        }

        private async void LoginButtonOnClick(object sender, EventArgs eventArgs)
        {


            progress = new ProgressDialog(this);
            progress.SetTitle("Log In");
            progress.SetMessage("Please wait while redirecting to login screen...");
            progress.SetCancelable(false); // disable dismiss by tapping outside of the dialog
            progress.Show();

            // Prepare for the login
            authorizeState = await client.PrepareLoginAsync();

            // Send the user off to the authorization endpoint
            var uri = Android.Net.Uri.Parse(authorizeState.StartUrl);
            var intent = new Intent(Intent.ActionView, uri);
            intent.AddFlags(ActivityFlags.NoHistory);
            StartActivity(intent);
        }

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

            SetContentView(Resource.Layout.Main);
            client = new Auth0Client(new Auth0ClientOptions
            {
                Domain = Resources.GetString(Resource.String.auth0_domain),
                ClientId = Resources.GetString(Resource.String.auth0_client_id),
                Activity = this
            });
            //preenche o arraylist com os dados
            GetEmails();
            //cria a instância do spinner declarado no arquivo Main
            spinner = FindViewById<Spinner>(Resource.Id.spnDados);
            //cria textview
            queroreconhecer = FindViewById<TextView>(Resource.Id.txtReconhecer);
            crie = FindViewById<TextView>(Resource.Id.txtCrie);
            conquiste = FindViewById<TextView>(Resource.Id.txtConquiste);
            entregue = FindViewById<TextView>(Resource.Id.txtEntregue);
            viva = FindViewById<TextView>(Resource.Id.txtViva);
            comentar = FindViewById<TextView>(Resource.Id.txtComentário);
            comentário = FindViewById<EditText>(Resource.Id.edtComentario);
            rdgcrie = FindViewById<RadioGroup>(Resource.Id.rdgCrie);
            rdgconquiste = FindViewById<RadioGroup>(Resource.Id.rdgConquiste);
            rdgentregue = FindViewById<RadioGroup>(Resource.Id.rdgEntregue);
            rdgviva = FindViewById<RadioGroup>(Resource.Id.rdgViva);
            adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, enderecos);
            spinner.Adapter = adapter;
            spinner.ItemSelected += Spinner_ItemSelected;
            enviar = FindViewById<Button>(Resource.Id.button1);
            enviar.Click += enviar_Click;
            void GetEmails()
            {
                enderecos = new ArrayList();
                enderecos.Add("Escolha um colaborador abaixo");
                enderecos.Add("alexandre_bonfim@whirlpool.com");
                enderecos.Add("alexandre_t_pires@whirlpool.com");
                enderecos.Add("ana_carolina_simoes @whirlpool.com");
                enderecos.Add("ana_claudia_s_belarmino@whirlpool.com");
                enderecos.Add("andre_costa@whirlpool.com");
                enderecos.Add("andre_l_teixeira@whirlpool.com");
                enderecos.Add("andreza_a_valle@whirlpool.com");
                enderecos.Add("anna_carolina_b_ferreira@whirlpool.com");
                enderecos.Add("bruno_b_souza@whirlpool.com");
                enderecos.Add("bruno_c_castanho@whirlpool.com");
                enderecos.Add("bruno_s_lombardero@whirlpool.com");
                enderecos.Add("caio_c_sacoman@whirlpool.com");
                enderecos.Add("carla_sedin@whirlpool.com");
                enderecos.Add("cassia_r_nascimento@whirlpool.com");
                enderecos.Add("celia_r_araujo@whirlpool.com");
                enderecos.Add("cesar_leandro_de_oliveira@whirlpool.com");
                enderecos.Add("daniel_b_szortyka@whirlpool.com");
                enderecos.Add("denis_caciatori@whirlpool.com");
                enderecos.Add("elisabete_c_ferreira@whirlpool.com");
                enderecos.Add("erick_c_senzaki@whirlpool.com");
                enderecos.Add("erika_g_souza@whirlpool.com");
                enderecos.Add("fabiana_monteiro@whirlpool.com");
                enderecos.Add("fernando_v_santos@whirlpool.com");
                enderecos.Add("gabriel_roveda@whirlpool.com");
                enderecos.Add("herivelto_alves_jr@whirlpool.com");
                enderecos.Add("jefferson_s_pecanha@whirlpool.com");
                enderecos.Add("josiane_a_teles@whirlpool.com");
                enderecos.Add("juliana_g_saito@whirlpool.com");
                enderecos.Add("juliano_ventola@whirlpool.com");
                enderecos.Add("leonardo_l_costa@whirlpool.com");
                enderecos.Add("leonardo_r_silva@whirlpool.com");
                enderecos.Add("lucas_m_santos@whirlpool.com");
                enderecos.Add("luiz_perea@whirlpool.com");
                enderecos.Add("norma_raphaeli@whirlpool.com");
                enderecos.Add("patricia_f_prates@whirlpool.com");
                enderecos.Add("priscila_l_dattilo@whirlpool.com");
                enderecos.Add("priscila_m_konte@whirlpool.com");
                enderecos.Add("reider_a_bernucio@whirlpool.com");
                enderecos.Add("renato_occhiuto@whirlpool.com");
                enderecos.Add("ricardo_a_fernandes@whirlpool.com");
                enderecos.Add("ricardo_matos_campaneruti @whirlpool.com");
                enderecos.Add("rogerio_pagotto@whirlpool.com");
                enderecos.Add("ruben_c_anacleto@whirlpool.com");
                enderecos.Add("taise_azevedo@whirlpool.com");
                enderecos.Add("vinicius_marques_assis@whirlpool.com");
                enderecos.Add("wanderly_t_limeira@whirlpool.com");
            }// fim getEmails

            void Spinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
            {
                Spinner spinner = (Spinner)sender;
                string toast = string.Format("Colaborador selecionado: {0}", spinner.GetItemAtPosition(e.Position));
                Toast.MakeText(this, toast, ToastLength.Long).Show();
                string texto = toast;


            }


        }
        void enviar_Click(object sender, EventArgs e)
        {   try { 
            RadioButton rdbgrupo1 = FindViewById<RadioButton>(rdgconquiste.CheckedRadioButtonId);
            RadioButton rdbgrupo2 = FindViewById<RadioButton>(rdgcrie.CheckedRadioButtonId);
            RadioButton rdbgrupo3 = FindViewById<RadioButton>(rdgviva.CheckedRadioButtonId);
            RadioButton rdbgrupo4 = FindViewById<RadioButton>(rdgentregue.CheckedRadioButtonId);
            if (rdbgrupo1.Selected == false || rdbgrupo2.Selected == false || rdbgrupo3.Selected == false || rdbgrupo4.Selected == false)
                {
                 string excecao = "Ao menos um botão de cada campo deve ser selecionado e o comentário deve ser preenchido";
                 Toast.MakeText(this, excecao, ToastLength.Long).Show();
                }
            else
                {
                    String emailescolhido = spinner.SelectedItem.ToString();
                    String campocomentario = comentário.Text;
                    string message = "Ao menos um botão de cada campo deve ser selecionado";
                    Toast.MakeText(ApplicationContext, message, ToastLength.Long).Show();
                    var email = new Intent(Android.Content.Intent.ActionSend);
                    //send to
                    email.PutExtra(Android.Content.Intent.ExtraEmail,
                    new string[] { "" + emailescolhido });
                    //cc to
                    email.PutExtra(Android.Content.Intent.ExtraCc,
                    new string[] { "comite_clima_ti@whirlpool.com" });
                    //subject
                    email.PutExtra(Android.Content.Intent.ExtraSubject, "SABIA QUE VOCÊ FOI RECONHECIDO?");
                    //content
                    email.PutExtra(Android.Content.Intent.ExtraText,
                    "Você foi reconhecido pelo(s) valor(es) de: " + rdbgrupo1.Text + " , " + rdbgrupo2.Text + " , " + rdbgrupo3.Text + " e " + rdbgrupo4.Text);
                    email.PutExtra(Android.Content.Intent.ExtraText, "" + campocomentario);
                    email.SetType("message/rfc822");
                    StartActivity(email);
                }

            }
            catch (Java.Lang.Exception ex)
            {
                string excecao = "Ao menos um botão de cada campo deve ser selecionado e o comentário deve ser preenchido";
                Toast.MakeText(this, excecao, ToastLength.Long).Show();

            }


        }




    }
}

【问题讨论】:

  • 我怀疑通过向您的列表中添加更多属性、过滤这些属性,然后检查每组按钮,您会得到最好的服务。我也希望这些是虚拟电子邮件,否则所有者会希望它们被删除。
  • 你的意思是“我想以一种方式做到这一点,任何群体中的一个就足够了”?你能详细说明一下吗?
  • 我不想选择 4 个按钮(每个 rdgroup 中的 1 个),我希望用户只选择 1 个单选组。现在,当我尝试这样做时,按钮会返回 null 异常并且应用程序中断

标签: c# android exception xamarin.android radio-group


【解决方案1】:

如果用户未选中 Xamarin Android 中的单选按钮,如何显示异常消息?

您可以使用radioGroup.CheckedRadioButtonId 来获取是否检查RadioGroup 的结果,如果为空,则返回值为-1。

public int RadioGroupIsChecked(RadioGroup radioGroup)
{
     //-1 means empty selection
     return radioGroup.CheckedRadioButtonId;
}

//When user doesn't check a radio button, show a Toast
if (RadioGroupIsChecked(group) == -1 || RadioGroupIsChecked(group2) == -1 || RadioGroupIsChecked(group3) == -1 || RadioGroupIsChecked(group4) == -1)
{
     string excecao = "Ao menos um botão de cada campo deve ser selecionado e o comentário deve ser preenchido";
     Toast.MakeText(this, excecao, ToastLength.Long).Show();
}

【讨论】:

    猜你喜欢
    • 2020-11-05
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多