2017-03-23 1 views
1

"button_addData"버튼을 클릭 할 때 "sendMessage()"메소드를 실행하려고 시도하지만 시도 할 때마다 앱이 충돌합니다. 그 목적은 데이터베이스를 생성하고 입력 된 모든 데이터를 그 안에 저장하는 것입니다. 여기에 코드 조각입니다 :Android Studio - java.lang.IllegalStateException : 버튼의 onClick 메서드를 찾을 수 없습니다.

package com.example.rishi.ibplanner; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.DatePicker; 
import android.widget.EditText; 
import android.widget.Spinner; 
import android.widget.Toast; 


import java.util.Calendar; 

public class EnterDataActivity extends AppCompatActivity { 

DatabaseHelper myDb; 
EditText editDescription, editDuration; 
Spinner spnPriority; 
Long deadlineDate; 
Button btnAddData; 

public long sendValue() { 
    DatePicker spnDatePicker = (DatePicker) findViewById(R.id.datepicker_deadline); 
    int day = spnDatePicker.getDayOfMonth(); 
    int month = spnDatePicker.getMonth(); 
    int year = spnDatePicker.getYear(); 

    Calendar thatDay = Calendar.getInstance(); 
    thatDay.set(Calendar.DAY_OF_MONTH, day); 
    thatDay.set(Calendar.MONTH, month); // 0-11 so 1 less 
    thatDay.set(Calendar.YEAR, year); 

    Calendar today = Calendar.getInstance(); 

    long diff = today.getTimeInMillis() - thatDay.getTimeInMillis(); //result in millis 
    long days = diff/(24 * 60 * 60 * 1000); //conversion into days 
    return days; 
} 
    // Button to proceed 
    public void sendMessage(View view) { 



     myDb = new DatabaseHelper(this); 

     editDescription = (EditText)findViewById(R.id.edit_description); 
     editDuration = (EditText)findViewById(R.id.edit_duration); 
     spnPriority = (Spinner)findViewById(R.id.priority_spinner); 

     deadlineDate = sendValue(); 

     btnAddData = (Button)findViewById(R.id.button_addData); 
     addData(); 
} 




public void addData() { 
    btnAddData.setOnClickListener(
      new View.OnClickListener() { 
       @Override 
       public void onClick (View v) { 
        boolean isInserted = myDb.insertData(editDescription.getText().toString(), 
          editDuration.getText().toString(), 
          spnPriority.getSelectedItem().toString(), 
          deadlineDate.toString()); 
        if (isInserted = true) 
         Toast.makeText(EnterDataActivity.this, "Data Inserted", Toast.LENGTH_LONG).show(); 
        else 
         Toast.makeText(EnterDataActivity.this, "Data not Inserted", Toast.LENGTH_LONG).show(); 
       } 
      } 
    ); 
} 

public void cancelActivity (View view) { 
    onBackPressed(); 
} 

}

하고 XML, 그냥 단추를 들면 :

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.example.rishi.ibplanner.EnterDataActivity"> 

<Button 
    android:id="@+id/button_addData" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="12dp" 
    android:onClick="sendMessage" 
    android:text="@string/add" /> 

</RelativeLayout> 

그리고 나는 로그 캣에서 나타나는 오류는 다음과 같습니다

java.lang.IllegalStateException: Could not find method sendMessage[EnterDataActivity](View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'button_addData' 
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327) 
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) 
                      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) 
+0

에서 OnCreate 코드가 기록 된 코드를 표시 할 수 있습니다, 당신은 이미 XML하여 지정으로 그 버튼에 리스너를 추가 할 필요가 온 클릭이없는 속성을 addData에서 리스너를 제거하십시오. –

답변

0

앱을 시작할 때 표시되는 내용은 무엇입니까? 버튼이 나타 납니까? XML 파일을 액티비티에 전개하지 않기 때문에 XML이 sendMessage() 메소드를 탐색 할 수 없습니다.

당신은 당신의 활동에 다음을 추가한다 :

this.setContentView(R.layout.your_layout) 
관련 문제