【问题标题】:Change values in array in android在android中更改数组中的值
【发布时间】:2017-05-13 16:36:19
【问题描述】:

当我单击 Governorates_nameedt (EditText) 时,我有两个想要的数组,在 AlertDialog 中显示Governates_names 并根据我选择的值 state_names Arrays.asList 中的值在我运行我的代码时发生更改我在@987654321 中收到错误@ in state_nameedt (EditText)。

我的代码

  Governorates_names = Arrays.asList("Ad Dakhiliyah"
                ,"Ad Dhahirah"
                ,"Al Batinah North"
                ,"Al Batinah South"
                ,"Al Buraimi"
                ,"Al Wusta"
                ,"Ash Sharqiyah North"
                ,"Ash Sharqiyah South"
                ,"Dhofar"
                ,"Muscat"
                ,"Musandam");
        if( String.valueOf(Governorates_nameedt.getText().toString()).equals("Ad Dakhiliyah"))
            state_names = Arrays.asList("Nizwa","Samail","Bahla","Al Hamra","Manah","Izki","Adam"  );

        else if( String.valueOf(Governorates_nameedt.getText().toString()).equals("Ad Dhahirah"))
            state_names = Arrays.asList("Ibri","Yanqul","Dhank");

        else if( String.valueOf(Governorates_nameedt.getText().toString()).equals("Al Batinah North")){
            state_names = Arrays.asList("Sohar","Shinas","Liwa","Saham","Al Khaburah","Suwayq");

        }else if( String.valueOf(Governorates_nameedt.getText().toString()).equals("Al Batinah South")){
            state_names = Arrays.asList("Nakhal","Wadi Al Maawil","Al Musanaah","Barka","Rustaq");

        }else if( String.valueOf(Governorates_nameedt.getText().toString()).equals("Al Buraimi")){
            state_names = Arrays.asList("Al Buraimi","Mahdah","Al Sinas");

        }else if( String.valueOf(Governorates_nameedt.getText().toString()).equals("Al Wusta")){
            state_names = Arrays.asList("Haima","Duqm","Mahout","Al Jazur");

        }else if( String.valueOf(Governorates_nameedt.getText().toString()).equals("Ash Sharqiyah North")){
            state_names = Arrays.asList("Ibra","Al-Mudhaibi","Bidiyah","Wadi Bani Khaled","Dema Wa Thaieen","Al Qabil");

        }else if( String.valueOf(Governorates_nameedt.getText().toString()).equals("Ash Sharqiyah South")){
            state_names = Arrays.asList("Masirah","Sur","Jalan Bani Bu Hassan","Jalan Bani Bu Ali","Al Kamil Wal Wafi");

        }else if( String.valueOf(Governorates_nameedt.getText().toString()).equals("Dhofar")){
            state_names = Arrays.asList("Salalah","Taqah","Mirbat","Thumrait","Sadah","Rakhyut","Dhalkut","Muqshin","Shalim and the Hallaniyat Islands","Al-Mazyona");

        }else if(String.valueOf(Governorates_nameedt.getText().toString()).equals("Dhofar")){
            state_names = Arrays.asList("Muttrah","Bawshar","Seeb","Al Amarat","Qurayyat");

        }else if( String.valueOf(Governorates_nameedt.getText().toString()).equals("Musandam")){
            state_names = Arrays.asList("Khasab","Bukha","Daba Al Bayah","Madha");


        }

        final ArrayAdapter<String> Governorates_name_Opt = new ArrayAdapter<>(personal_info.this, android.R.layout.simple_spinner_dropdown_item, Governorates_names);
        final List<String> finalOpt1 = Governorates_names;
        Governorates_nameedt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new AlertDialog.Builder(personal_info.this)
                        .setTitle("Select ")
                        .setAdapter(Governorates_name_Opt, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                Governorates_nameedt.setText(finalOpt1.get(which).toString());
                                dialog.dismiss();
                            }
                        }).create().show();
            }
        });
        final ArrayAdapter<String> state_name_Opt = new ArrayAdapter<>(personal_info.this, android.R.layout.simple_spinner_dropdown_item, state_names);
        final List<String> finalOpt2 = state_names;
        state_nameedt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new AlertDialog.Builder(personal_info.this)
                        .setTitle("Select ")
                        .setAdapter(state_name_Opt, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                state_nameedt.setText(finalOpt2.get(which).toString());
                                dialog.dismiss();
                            }
                        }).create().show();
            }
        });

我的错误

05-13 16:42:25.720 8190-8190/com.example.hamdaalissaei.final_flah W/dalvikvm:threadid=1:线程以未捕获的异常退出(组=0xa61a1908) 05-13 16:42:25.724 8190-8190/com.example.hamdaalissaei.final_flah E/AndroidRuntime: 致命异常: main java.lang.NullPointerException 在 android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330) 在 android.widget.ListView.setAdapter(ListView.java:462) 在 android.support.v7.app.AlertController.setupView(AlertController.java:538) 在 android.support.v7.app.AlertController.installContent(AlertController.java:226) 在 android.support.v7.app.AlertDialog.onCreate(AlertDialog.java:257) 在 android.app.Dialog.dispatchOnCreate(Dialog.java:355) 在 android.app.Dialog.show(Dialog.java:260) 在 com.example.hamdaalissaei.final_flah.personal_info$6.onClick(personal_info.java:247) 在 android.view.View.performClick(View.java:4204) 在 android.view.View$PerformClick.run(View.java:17355) 在 android.os.Handler.handleCallback(Handler.java:725) 在 android.os.Handler.dispatchMessage(Handler.java:92) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:5041) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 在 dalvik.system.NativeStart.main(本机方法) 05-13 16:42:25.724 466-835/system_process W/ActivityManager:强制完成活动 com.example.hamdaalissaei.final_flah/.personal_info

请帮我解决这个问题

【问题讨论】:

  • 请粘贴堆栈跟踪
  • @Mercato 更新我的问题

标签: android arrays


【解决方案1】:

来自您的堆栈跟踪:

8190/com.example.hamdaalissaei.final_flah E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330) at 

您作为输入输入的其中一个数组似乎为空。从您的代码来看,state_names 似乎是问题所在。也许if else 语句都没有真正起作用。试试放

else if( String.valueOf(Governorates_nameedt.getText().toString()).equals("Musandam")){
        state_names = Arrays.asList("Khasab","Bukha","Daba Al Bayah","Madha");
    } else {
        state_names = new List<String>();
}

由于ArrayAdapter 所做的是尝试从您输入的数组中找出数组的大小,而state_names 似乎为空。

编辑:state_names 似乎是由 EditText Governorates_nameedt 的值决定的。 EditText 不是一个神奇的东西,每次编辑它都会调用你创建的 if else 循环。为此,请添加一个 TextWatcher:

Governorates_nameedt.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            //Put your if else loop HERE
        }
    });

当您在用户放入任何内容之前第一次运行代码时,只需先将state_names 初始化为新的List&lt;String&gt;(),以防止NullPointerError

【讨论】:

  • 是的,现在它显示空列表...我如何显示 state_names 项目!!?
猜你喜欢
  • 2017-03-06
  • 1970-01-01
  • 2014-03-15
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多