2017-10-08 102 views
0

我的應用程序崩潰每次我嘗試點擊一個按鈕,將文本輸入到listView,我得到的「java.lang.IllegalStateException:可能不執行android的方法:onClick「;我試過其他解決方案,但我似乎無法找到我自己的解決方案。任何幫助表示讚賞。應用程序崩潰 - java.lang.IllegalStateException:無法執行android的方法:onClick

MainActivity.java

public class MainActivity extends AppCompatActivity { 
ListView listView; 
ArrayList<String> arrayList; 
ArrayAdapter<String> arrayAdapter; 
String infoText; 
int position; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Thread thread = new Thread(new Runnable(){ 
     @Override 
     public void run(){ 
      SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
      boolean isFirstStart = getPrefs.getBoolean("started",true); 
      if(isFirstStart) 
      { 
       startActivity(new Intent (MainActivity.this,Intro.class)); 
       SharedPreferences.Editor e = getPrefs.edit(); 
       e.putBoolean("started", false); 
       e.apply(); 
      } 
     } 
    }); 
    thread.start(); 
    listView = (ListView) findViewById(R.id.ListView); 
    arrayList = new ArrayList<>(); 
    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList); 
    listView.setAdapter(arrayAdapter); 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent intent = new Intent(); 
      intent.setClass(MainActivity.this,EditMessageClass.class); 
      intent.putExtra(Intent_Constants.INTENT_INFO_DATA,arrayList.get(position).toString()); 
      intent.putExtra(Intent_Constants.INTENT_ITEM_POSITION,position); 
      startActivityForResult(intent,Intent_Constants.INTENT_REQUEST_CODE_2); 
     } 
    }); 
} 

public void onClick(View v){ 
    Intent intent = new Intent(); 
    intent.setClass(MainActivity.this,EditFieldClass.class); 
    startActivityForResult(intent,Intent_Constants.INTENT_REQUEST_CODE); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    if (resultCode==Intent_Constants.INTENT_REQUEST_CODE){ 
     infoText = data.getStringExtra(Intent_Constants.INTENT_INFO_FIELD); 
     arrayList.add(infoText); 
     arrayAdapter.notifyDataSetChanged(); 
    } 
    else if(resultCode==Intent_Constants.INTENT_REQUEST_CODE_2){ 
     infoText = data.getStringExtra(Intent_Constants.INTENT_CHANGED_INFO); 
     position = data.getIntExtra(Intent_Constants.INTENT_ITEM_POSITION,-1); 
     arrayList.remove(position); 
     arrayList.add(position,infoText); 
     arrayAdapter.notifyDataSetChanged(); 
    } 
} 
} 

Intent_Constants.java

public class Intent_Constants { 
public final static int INTENT_REQUEST_CODE=1; 
public final static int INTENT_RESULT_CODE=1; 
public final static int INTENT_REQUEST_CODE_2=2; 
public final static int INTENT_RESULT_CODE_2=2; 
public final static String INTENT_INFO_FIELD="info_field"; 
public final static String INTENT_INFO_DATA="info_data"; 
public final static String INTENT_ITEM_POSITION="item_position"; 
public final static String INTENT_CHANGED_INFO="changed_info"; 

EditMessageClass.java

public class EditMessageClass extends AppCompatActivity { 
String infoText; 
int position; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.add_promo_layout); 
    Intent intent = getIntent(); 
    infoText = intent.getStringExtra(Intent_Constants.INTENT_INFO_DATA); 
    position = intent.getIntExtra(Intent_Constants.INTENT_ITEM_POSITION,-1); 
    EditText infoData = (EditText) findViewById(R.id.info); 
    infoData.setText(infoText); 
} 

public void saveButtonClicked(View v){ 
    String changedinfoText = ((EditText)findViewById(R.id.info)).getText().toString(); 
    Intent intent = new Intent(); 
    intent.putExtra(Intent_Constants.INTENT_CHANGED_INFO,changedinfoText); 
    intent.putExtra(Intent_Constants.INTENT_ITEM_POSITION, position); 
    setResult(Intent_Constants.INTENT_RESULT_CODE_2,intent); 
    finish(); 
} 

}

EditFieldClass.java

public class EditFieldClass extends AppCompatActivity { 

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

public void saveButtonClicked(View v){ 
    String infoText = ((EditText)findViewById(R.id.info)).getText().toString(); 
    if(infoText.equals("")){ 
    } 
    else{ 
     Intent intent = new Intent(); 
     intent.putExtra(Intent_Constants.INTENT_INFO_FIELD,infoText); 
     setResult(Intent_Constants.INTENT_RESULT_CODE,intent); 
     finish(); 
    } 
} 

}

日誌

FATAL EXCEPTION: main 
Process: gabriel.com.prototype, PID: 15435 
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.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference 
    at gabriel.com.prototype.EditFieldClass.saveButtonClicked(EditFieldClass.java:27) 
    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)  
+0

顯然,EditFieldClass的'add_promo_layout'佈局中沒有ID爲'info'的EditText。 –

+0

檢查ID或只是發佈'add_promo_layout.xml'。 –

回答

0

根據您的logcat的消息,我可以說,你的EditText對象是null 問題是由這一行造成的。

((EditText)findViewById(R.id.info)).getText().toString() 

確保在EditFieldClass擁有的EditText id爲 '信息'。

0
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference 
                     at gabriel.com.prototype.EditFieldClass.saveButtonClicked(EditFieldClass.java:27) 
                     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) 

您的EditText爲null,檢查EDITTEXT ID

相關問題