Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.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 无法从onClick Android调用其他方法-抛出非法状态异常_Java_Android - Fatal编程技术网

Java 无法从onClick Android调用其他方法-抛出非法状态异常

Java 无法从onClick Android调用其他方法-抛出非法状态异常,java,android,Java,Android,我是Android的新手,正在创建一个简单的联系人应用程序。我有一个“联系人”类,它包含名字、姓氏等,在我的活动中,我试图从编辑文本框中读取输入并创建一个新联系人 问题是,当我在辅助活动页面中调用createContact()时,在执行该方法之前会立即抛出一个illegalStateException。在过去的一天里,我一直在寻找解决办法,不知道这是错的。这两个函数都是项目中第二个活动页的一部分,都在同一个Java类中……这就像我可以在onclick方法中访问我想要的任何东西一样,但是一旦我尝试

我是Android的新手,正在创建一个简单的联系人应用程序。我有一个“联系人”类,它包含名字、姓氏等,在我的活动中,我试图从编辑文本框中读取输入并创建一个新联系人

问题是,当我在辅助活动页面中调用createContact()时,在执行该方法之前会立即抛出一个illegalStateException。在过去的一天里,我一直在寻找解决办法,不知道这是错的。这两个函数都是项目中第二个活动页的一部分,都在同一个Java类中……这就像我可以在onclick方法中访问我想要的任何东西一样,但是一旦我尝试在该方法之外调用函数或类,我就会得到一个异常

谢谢你的帮助

以下是我的onclick的代码:

public void onSaveClicked(View v) {

        // Create a new contact from form data
        Contact contact = createContact();


        try {
        FileOutputStream fileout=openFileOutput("contactList.txt", MODE_PRIVATE);
        OutputStreamWriter outputWriter=new OutputStreamWriter(fileout);
        outputWriter.write(contact.getFirstName());
        outputWriter.close();

        //display file saved message
        Toast.makeText(getBaseContext(), contact.getFirstName() + contact.getLastName() + " saved successfully!",
                Toast.LENGTH_SHORT).show();

    } catch (Exception e) {
        e.printStackTrace();
    }
}
createContact方法:

    private Contact createContact()  {
    Contact contact = new Contact(
            firstNameEditText.getText().toString(),
            middleInitialEditText.getText().toString().charAt(0), //Convert string to char
            lastNameEditText.getText().toString(),
            phoneNumberEditText.getText().toString(),
            convertDate(birthdateButton.getText()),     // Convert CharSequence to Date Obj
            convertDate(firstMetButton.getText())       // Convert CharSequence to Date Obj
    );
    return contact;
}
堆栈跟踪:

02-21 02:36:58.399 11526-11526/com.fafaffy.contacts E/AndroidRuntime: FATAL EXCEPTION: main
                                                                  Process: com.fafaffy.contacts, PID: 11526
                                                                  java.lang.IllegalStateException: Could not execute method for android:onClick
                                                                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
                                                                      at android.view.View.performClick(View.java:5637)
                                                                      at android.view.View$PerformClick.run(View.java:22429)
                                                                      at android.os.Handler.handleCallback(Handler.java:751)
                                                                      at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                      at android.os.Looper.loop(Looper.java:154)
                                                                      at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
                                                                   Caused by: java.lang.reflect.InvocationTargetException
                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
                                                                      at android.view.View.performClick(View.java:5637) 
                                                                      at android.view.View$PerformClick.run(View.java:22429) 
                                                                      at android.os.Handler.handleCallback(Handler.java:751) 
                                                                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                      at android.os.Looper.loop(Looper.java:154) 
                                                                      at android.app.ActivityThread.main(ActivityThread.java:6119) 
                                                                      at java.lang.reflect.Method.invoke(Native Method) 
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
                                                                   Caused by: java.lang.IllegalArgumentException: Cannot format given Object as a Date
                                                                      at java.text.DateFormat.format(DateFormat.java:302)
                                                                      at java.text.Format.format(Format.java:157)
                                                                      at com.fafaffy.contacts.DetailContact.convertDate(DetailContact.java:117)
                                                                      at com.fafaffy.contacts.DetailContact.createContact(DetailContact.java:107)
                                                                      at com.fafaffy.contacts.DetailContact.onSaveClicked(DetailContact.java:72)
                                                                      at java.lang.reflect.Method.invoke(Native Method) 
                                                                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                                                                      at android.view.View.performClick(View.java:5637) 
                                                                      at android.view.View$PerformClick.run(View.java:22429) 
                                                                      at android.os.Handler.handleCallback(Handler.java:751) 
                                                                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                      at android.os.Looper.loop(Looper.java:154) 
                                                                      at android.app.ActivityThread.main(ActivityThread.java:6119) 
                                                                      at java.lang.reflect.Method.invoke(Native Method) 
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
完整的活动代码:

public class DetailContact extends AppCompatActivity {

// Create vars for all form fields
private EditText firstNameEditText;
private EditText lastNameEditText;
private EditText middleInitialEditText;
private EditText phoneNumberEditText;
private Button birthdateButton;
private Button firstMetButton;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide();
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_detail_contact);


    // Assign vars to form fields
    firstNameEditText       = (EditText)findViewById(R.id.firstNameTextBox);
    lastNameEditText        = (EditText)findViewById(R.id.lastNameTextBox);
    middleInitialEditText   = (EditText)findViewById(R.id.middleInitialTextBox);
    phoneNumberEditText     = (EditText)findViewById(R.id.phoneNumberTextBox);
    birthdateButton         = (Button)findViewById(R.id.birthdate);
    firstMetButton          = (Button)findViewById(R.id.firstContactDateButton);


}
public void showDatePickerDialog(View v) {
    DatePickerFragment newFragment = new DatePickerFragment();
    newFragment.setButton((Button)v);
    newFragment.show(getFragmentManager(), "date picker");
    //((Button)v).setText(newFragment.getSelectedDate().toString());
}






// Working Save Function  --------------------------------------------------------------------------------------------------------
    public void onSaveClicked(View v) {

        // Create a new contact from form data
        Contact contact = createContact();

        try {
        FileOutputStream fileout=openFileOutput("contactList.txt", MODE_PRIVATE);
        OutputStreamWriter outputWriter=new OutputStreamWriter(fileout);
        outputWriter.write(contact.getFirstName());
        outputWriter.close();

        //display file saved message
        Toast.makeText(getBaseContext(), contact.getFirstName() + contact.getLastName() + " saved successfully!",
                Toast.LENGTH_SHORT).show();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

// Method creates a contact from form input
// Middle initial is converted from string to char
// Birthdate & firstMet date are both converted from CharSequence to Date objects
public  Contact createContact()  {
    Contact contact = new Contact(
            firstNameEditText.getText().toString(),
            middleInitialEditText.getText().toString().charAt(0), //Convert string to char
            lastNameEditText.getText().toString(),
            phoneNumberEditText.getText().toString(),
            convertDate(birthdateButton.getText()),     // Convert CharSequence to Date Obj
            convertDate(firstMetButton.getText())       // Convert CharSequence to Date Obj
    );

    return contact;
}


// Helper method from createContact method -- birtdate & firstmet date need to be converted
// from CharSequence to Date objects to match Contact model
private Date convertDate(CharSequence input) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String dateString = sdf.format(input);
    Date date = null;
    try {
        date = sdf.parse(dateString);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return date;
}

}中的Issue是您提供给convertDate方法的日期。这在堆栈跟踪中有明确说明。最好修改convertDate方法,如下所示,以便在try-catch块中也包含sdf.format方法。并将catch close更改为接受所有异常,而不是特定的解析异常

private Date convertDate(CharSequence input) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

     date = null;
    try {
         String dateString = sdf.format(input);
        date = sdf.parse(dateString);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return date;
}

Issue in是提供给convertDate方法的日期。这在堆栈跟踪中有明确说明。最好修改convertDate方法,如下所示,以便在try-catch块中也包含sdf.format方法。并将catch close更改为接受所有异常,而不是特定的解析异常

private Date convertDate(CharSequence input) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

     date = null;
    try {
         String dateString = sdf.format(input);
        date = sdf.parse(dateString);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return date;
}

把你的书堆贴上去看看书堆是怎么回事?我怀疑还有一个原因是lineFWIW,我很久以前就停止在xml中添加单击操作了。只在Java类中设置侦听器的代码并不多。同样更容易调试布局文件,可能是onclick声明的问题,post-your-stack-traced-stack-traceIs这是全部吗?我怀疑还有一个原因是lineFWIW,我很久以前就停止在xml中添加单击操作了。只在Java类中设置侦听器的代码并不多。同样更容易调试布局文件,onclick声明可能会出现问题