2014-10-16 22 views
0

我在EventBus上遇到了一些麻煩。 特別是當我試圖運行它給我的錯誤訂戶類... TaskAdapter沒有公共方法,名爲onEvent

10-16 22:59:38.277: E/AndroidRuntime(1175): Caused by: de.greenrobot.event. 
EventBusException: Subscriber class com.example.listtame.UI.TaskAdapter 
has no public methods called onEvent 

應用但它確實有這樣的一個公共方法如下所示。有誰知道爲什麼事件總線將 拋出此異常?

謝謝!

package com.example.listtame.UI; 

import java.util.Collections; 
import java.util.List; 

import com.example.listtame.R; 
import com.example.listtame.Activities.TaskList; 
import com.example.listtame.CustomObj.Task; 
import com.example.listtame.Events.TaskListFetchedEvent; 

import de.greenrobot.event.EventBus; 



import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class TaskAdapter extends BaseAdapter { 

    private List<Task> tasks = Collections.emptyList(); 

    private final Context context; 



    public TaskAdapter(Context context) { 
     this.context = context; 
     EventBus.getDefault().register(this); 

    } 

    public void OnEventMainThread(TaskListFetchedEvent e) { 
     this.tasks = TaskListFetchedEvent.mTaskList; 
     notifyDataSetChanged(); 
    } 


    private static class ViewHolder { 
     public final ImageView task_image; 
     public final TextView task_text; 

     public ViewHolder(ImageView task_image, TextView task_text) { 
      this.task_image = task_image; 
      this.task_text = task_text; 
     } 
    } 


    public void updateTasks(List<Task> tasks) { 
     this.tasks = tasks; 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() { 
     return tasks.size(); 
    } 

    @Override 
    public Task getItem(int position) { 
     return tasks.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     ImageView task_image; 
     TextView task_text; 
     if (convertView == null) { 
      convertView = LayoutInflater.from(context) 
       .inflate(R.layout.task_box, parent, false); 
      task_image = (ImageView) convertView.findViewById(R.id.task_icon); 
      task_text = (TextView) convertView.findViewById(R.id.task_text); 
      convertView.setTag(new ViewHolder(task_image, task_text)); 
     } else { 
      ViewHolder viewHolder = (ViewHolder) convertView.getTag(); 
      task_image = viewHolder.task_image; 
      task_text = viewHolder.task_text; 
     } 

     Task task = getItem(position); 
     task_text.setText(task.getText()); 
     task_image.setImageResource(R.drawable.ic_debug); 

     return convertView; 
    } 


} 

我也嘗試將OnEventMainThread方法更改爲簡單的OnEvent。有道理我得到同樣的例外。 完整的LogCat張貼在下面,以防萬一有人好奇。

10-16 22:59:38.261: D/AndroidRuntime(1175): Shutting down VM 
10-16 22:59:38.261: W/dalvikvm(1175): threadid=1: thread exiting with uncaught exception (group=0xa62bb288) 
10-16 22:59:38.277: D/dalvikvm(1175): GC_CONCURRENT freed 264K, 4% free 10863K/11207K, paused 12ms+1ms, total 16ms 
10-16 22:59:38.277: E/AndroidRuntime(1175): FATAL EXCEPTION: main 
10-16 22:59:38.277: E/AndroidRuntime(1175): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.listtame/com.example.listtame.Activities.MainVerticalActivity}: android.view.InflateException: Binary XML file line #58: Error inflating class fragment 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.app.ActivityThread.access$600(ActivityThread.java:130) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.os.Looper.loop(Looper.java:137) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at dalvik.system.NativeStart.main(Native Method) 
10-16 22:59:38.277: E/AndroidRuntime(1175): Caused by: android.view.InflateException: Binary XML file line #58: Error inflating class fragment 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:256) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.app.Activity.setContentView(Activity.java:1867) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.support.v7.app.ActionBarActivity.superSetContentView(ActionBarActivity.java:217) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.support.v7.app.ActionBarActivityDelegateICS.setContentView(ActionBarActivityDelegateICS.java:110) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:77) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at com.example.listtame.Activities.MainVerticalActivity.onCreate(MainVerticalActivity.java:67) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.app.Activity.performCreate(Activity.java:5008) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  ... 11 more 
10-16 22:59:38.277: E/AndroidRuntime(1175): Caused by: de.greenrobot.event.EventBusException: Subscriber class com.example.listtame.UI.TaskAdapter has no public methods called onEvent 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at de.greenrobot.event.SubscriberMethodFinder.findSubscriberMethods(SubscriberMethodFinder.java:99) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at de.greenrobot.event.EventBus.register(EventBus.java:186) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at de.greenrobot.event.EventBus.register(EventBus.java:140) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at com.example.listtame.UI.TaskAdapter.<init>(TaskAdapter.java:33) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at com.example.listtame.Activities.TaskList.onCreate(TaskList.java:42) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.support.v4.app.Fragment.performCreate(Fragment.java:1481) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:908) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1099) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1201) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:292) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676) 
10-16 22:59:38.277: E/AndroidRuntime(1175):  ... 24 more 

編輯***********************************

邁克爾已經發佈下面的解決方案。 onEvent需要onEvent而不是OnEvent。

+0

你是通過反射調用這個方法嗎?如果是這樣,你可以發佈反饋電話的代碼嗎? – 2014-10-16 23:17:23

+0

按'這個方法'我假設你正在談論OnEventMainThread方法?我已經粘貼了。 – AnnonAshera 2014-10-16 23:23:09

回答

1

看完github上的greenrobot EventBus代碼後,我發現他們希望你用「onEvent」+一個可選的修飾符來聲明你的事件回調,我發現你正在做的事情。

但是,您正在用大寫'O'開始您的方法。將您的方法重命名爲onEventMainThread,我敢打賭它會起作用!

+0

現在看起來很明顯。非常感謝!這解決了它!你搖滾邁克爾! – AnnonAshera 2014-10-17 00:45:46

+0

謝謝。請記住接受答案,如果它幫助你。 – 2014-10-17 01:34:48

+0

已接受。祝你有個好的一天! – AnnonAshera 2014-10-17 02:23:26

相關問題