Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将微调器和Button onClick Listener组合在一起会给我一个空指针异常_Java_Android_Android Studio_Nullpointerexception_Android Spinner - Fatal编程技术网

Java 将微调器和Button onClick Listener组合在一起会给我一个空指针异常

Java 将微调器和Button onClick Listener组合在一起会给我一个空指针异常,java,android,android-studio,nullpointerexception,android-spinner,Java,Android,Android Studio,Nullpointerexception,Android Spinner,我有一个应用程序,允许一个人发布公告。此人必须在微调器上选择其公告的类别,并在编辑文本上键入其公告。输入这两个字段后,按钮将允许人员进行公告,但如果微调器值或EditText值为空,则应生成错误。我尝试使按钮对键入公告的人不可见,因为我遇到了空指针异常,但切换到后,使按钮不可见,我仍然会遇到相同的错误。这是我的代码: public class MakeAnnouncements extends AppCompatActivity { private EditText announcement;

我有一个应用程序,允许一个人发布公告。此人必须在微调器上选择其公告的类别,并在
编辑文本上键入其公告。输入这两个字段后,按钮将允许人员进行公告,但如果微调器值或
EditText
值为空,则应生成错误。我尝试使按钮对键入公告的人不可见,因为我遇到了
空指针异常
,但切换到后,使按钮不可见,我仍然会遇到相同的错误。这是我的代码:

public class MakeAnnouncements extends AppCompatActivity {

private EditText announcement;
private Button announce_button;
private ProgressDialog announcementDialog;
private DatabaseReference mRootRef;

private FirebaseAuth mAuth;
private String mCurrentUserId;
private String announcer;
private String []SPINNERCATEGORY ={"General","Cubs","Scouts","Seniors"};
private String category_text;

private MaterialBetterSpinner betterSpinner;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_make_announcements);

    announcementDialog = new ProgressDialog(this);
    mRootRef = FirebaseDatabase.getInstance().getReference();

    mAuth = FirebaseAuth.getInstance();
    mCurrentUserId =  mAuth.getCurrentUser().getUid();
    announcement = (EditText)findViewById(R.id.announce_text);
    announce_button = (Button)findViewById(R.id.announce_btn);

    announce_button.setVisibility(View.VISIBLE);
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,SPINNERCATEGORY);
    betterSpinner = (MaterialBetterSpinner)findViewById(R.id.category_spinner);


    betterSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {

            String spinner_value= adapterView.getItemAtPosition(position).toString();
            if(position==0){
                // no item selected show Toast message
                announce_button.setVisibility(View.INVISIBLE);
            } else{
                announce_button.setVisibility(View.VISIBLE);
                // item selected
            }

                category_text = spinner_value;


            return;
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

            announce_button.setVisibility(View.INVISIBLE);

        }
    });


    betterSpinner.setAdapter(arrayAdapter);


    mRootRef.child("Users").child(mCurrentUserId).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            announcer = dataSnapshot.child("name").getValue().toString();

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });


    announce_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {  //<----- This is where i am getting a null point exception 

            String announced_text = announcement.getText().toString().trim();
            String choosen_category = category_text.trim();



            if (TextUtils.isEmpty(announced_text)){

                announcement.setError("You did not type any announcement");

                return;


            }



            announcementDialog.setTitle("Posting Announcement...");
            announcementDialog.setMessage("Please wait...");
            announcementDialog.setCanceledOnTouchOutside(false);
            announcementDialog.show();
            PostAnnouncement(announced_text,choosen_category);
        }
    });
}

private void PostAnnouncement(String announced_text, String choosen_category) {



    DatabaseReference chat_push_key = mRootRef.child("Announcements").child(announcer).push();

    String push_key = chat_push_key.getKey();

    Map messageMap = new HashMap();
    messageMap.put("announcement",announced_text);
    messageMap.put("type","text");
    messageMap.put("category",choosen_category);
    messageMap.put("from",announcer);
    messageMap.put("time", ServerValue.TIMESTAMP);

    Map messageUserMap = new HashMap();
    messageUserMap.put( "Announcements" + "/" + push_key, messageMap);

    announcement.setText("");
    announcementDialog.hide();
    Toast.makeText(getApplicationContext(), "Your announcement was successfully posted",Toast.LENGTH_LONG).show();

    mRootRef.updateChildren(messageUserMap, new DatabaseReference.CompletionListener() {
        @Override
        public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {

            if(databaseError != null){

                Log.d("CHAT_LOG", databaseError.getMessage().toString());

            }

        }
    });



}
}
公共类MakeAnnounces扩展了AppCompative活动{
私人编辑文本公告;
私人按钮宣布按钮;
私有进程对话框公告对话框;
私有数据库参考mRootRef;
私人消防队;
私有字符串mCurrentUserId;
私人弦乐播音员;
私人字符串[]喷丝头类别={“将军”、“小熊”、“童子军”、“长者”};
私有字符串类别\文本;
私人材料纺织厂;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u发布公告);
announcementDialog=newprogressdialog(此);
mRootRef=FirebaseDatabase.getInstance().getReference();
mAuth=FirebaseAuth.getInstance();
mCurrentUserId=mAuth.getCurrentUser().getUid();
公告=(EditText)findViewById(R.id.announcer\u text);
宣布按钮=(按钮)findViewById(R.id.announce\u btn);
宣布按钮。设置可见性(视图。可见);
ArrayAdapter ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u下拉列表\u item\u 1line,SPINNERCATEGORY);
betterSpinner=(MaterialBetterSpinner)findViewById(R.id.category_spinner);
betterSpinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共位置(适配器视图适配器视图视图视图视图内部位置长l){
字符串微调器_value=adapterView.getItemAtPosition(位置).toString();
如果(位置==0){
//未选择任何项目显示Toast消息
宣布按钮。设置可见性(视图。不可见);
}否则{
宣布按钮。设置可见性(视图。可见);
//选定项目
}
类别\文本=微调器\值;
返回;
}
@凌驾
未选择公共无效(AdapterView AdapterView){
宣布按钮。设置可见性(视图。不可见);
}
});
设置适配器(阵列适配器);
mRootRef.child(“用户”).child(mCurrentUserId).addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
announcer=dataSnapshot.child(“name”).getValue().toString();
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
宣布按钮。setOnClickListener(新视图。OnClickListener(){
@凌驾

public void onClick(View View){/根据您的代码,您可以检查变量
category\u text

if(TextUtils.isEmpty(category_text)){
    //Show your error message
}

在检查了可能的解决方法后,我得到了帮助。 我首先将微调器_值更改为全局变量。然后编写以下代码:

    String announced_text = announcement.getText().toString().trim();
    String choosen_category = null;

        if (TextUtils.isEmpty(announced_text)){

            announcement.setError("You did not type any announcement");

            return;


        }
         if(spinner_value != null){
            choosen_category = spinner_value.trim();

           return;
         }
          else if(spinner_value == null){

           betterspinner.setError("This section must be selected before proceeding");

           return;

          }

之后,我删除了初始代码中的按钮可视性。

使用spinner,默认值始终选择第一个值,但第一个值为null,如果未输入任何内容,我将获得NullPointerException@BrijeshJoshi你能看看我的解决方案吗?但在选择一个微调器值后,当n当选择某个值时,选择其他值