如何在android中使用EventBus库

如何在android中使用EventBus库,android,event-bus,Android,Event Bus,我想为一个站点开发安卓应用程序,在这个应用程序中我想使用okhttpv3和EventBus v3。eventbus库源链接:。 我写了下面的代码,但在运行应用程序时,向我显示FC错误 okHttp\u页面(主要活动)代码: public class okHTTP_Page extends AppCompatActivity { private RecyclerView recycler; private okHTTP_adapter adaper; @Override

我想为一个站点开发安卓应用程序,在这个应用程序中我想使用
okhttpv3
EventBus v3
。eventbus库源链接:。
我写了下面的代码,但在运行应用程序时,向我显示FC错误
okHttp\u页面(主要活动)代码:

public class okHTTP_Page extends AppCompatActivity {

    private RecyclerView recycler;
    private okHTTP_adapter adaper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ok_http__page);
        EventBus.getDefault().register(this);

        recycler = (RecyclerView) findViewById(R.id.okHTTP_recycler);
        recycler.setHasFixedSize(true);
        recycler.setLayoutManager(new LinearLayoutManager(this));

        okHTTP_info info = new okHTTP_info();
        info.getOkHTTP_info(this);

        adaper = new okHTTP_adapter(this);
        recycler.setAdapter(adaper);

    }
}
okHttp\u信息(异步任务类)代码:

public class okHTTP_info {
    private Context mContext;

    public void getOkHTTP_info(Context context) {
        mContext = context;
        new getInfo().execute(serverIP.getIP());
    }

    private class getInfo extends AsyncTask<String, Void, String> {
        EventBus bus = EventBus.getDefault();
        private String ou_response;
        private List<okHTTP_dataProvider> infoModels;

        @Override
        protected void onPreExecute() {
            CustomProcessDialog.createAndShow(mContext);
            infoModels = new ArrayList<>();
        }

        @Override
        protected String doInBackground(String... params) {
            OkHttpClient client = new OkHttpClient();

            RequestBody requestBody = new MultipartBody.Builder()
                    .addFormDataPart("test", "2")
                    .addFormDataPart("posts", params[0])
                    .build();

            Request request = new Request.Builder()
                    .url(serverIP.getIP())
                    .post(requestBody)
                    .build();

            Response response;
            try {
                response = client.newCall(request).execute();
                ou_response = response.body().string();
                response.body().close();
                if (ou_response != null) {
                    try {
                        JSONObject postObj = new JSONObject(ou_response);
                        JSONArray postsArray = postObj.getJSONArray("posts");
                        infoModels = new ArrayList<>();

                        for (int i = 0; i < postsArray.length(); i++) {
                            JSONObject postObject = postsArray.getJSONObject(i);
                            int id = postObject.getInt("id");
                            String title = postObject.getString("title");
                            Log.d("Data", "Post id: " + id);
                            Log.d("Data", "Post title: " + title);

                            //Use the title and id as per your requirement
                            infoModels.add(new okHTTP_dataProvider(
                                    postObject.getString("title"),
                                    postObject.getInt("id")));
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return ou_response;
        }

        @Override
        protected void onPostExecute(String result) {
            CustomProcessDialog.dissmis();
            if (result != null) {
                bus.post(infoModels);
            }
        }
    }
}
公共类okHTTP\u信息{
私有上下文;
公共无效getOkHTTP_信息(上下文){
mContext=上下文;
新建getInfo().execute(serverIP.getIP());
}
私有类getInfo扩展了异步任务{
EventBus=EventBus.getDefault();
私有字符串ou_响应;
私有列表信息模型;
@凌驾
受保护的void onPreExecute(){
CustomProcessDialog.createAndShow(mContext);
infoModels=newarraylist();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
OkHttpClient=新的OkHttpClient();
RequestBody RequestBody=新的MultipartBody.Builder()
.addFormDataPart(“测试”,“2”)
.addFormDataPart(“posts”,参数[0])
.build();
Request Request=newrequest.Builder()
.url(serverIP.getIP())
.post(请求主体)
.build();
反应;
试一试{
response=client.newCall(request.execute();
ou_response=response.body().string();
response.body().close();
if(ou_响应!=null){
试一试{
JSONObject postObj=新JSONObject(ou_响应);
JSONArray postsArray=postObj.getJSONArray(“posts”);
infoModels=newarraylist();
for(int i=0;i
LogCat错误:

public class okHTTP_info {
    private Context mContext;

    public void getOkHTTP_info(Context context) {
        mContext = context;
        new getInfo().execute(serverIP.getIP());
    }

    private class getInfo extends AsyncTask<String, Void, String> {
        EventBus bus = EventBus.getDefault();
        private String ou_response;
        private List<okHTTP_dataProvider> infoModels;

        @Override
        protected void onPreExecute() {
            CustomProcessDialog.createAndShow(mContext);
            infoModels = new ArrayList<>();
        }

        @Override
        protected String doInBackground(String... params) {
            OkHttpClient client = new OkHttpClient();

            RequestBody requestBody = new MultipartBody.Builder()
                    .addFormDataPart("test", "2")
                    .addFormDataPart("posts", params[0])
                    .build();

            Request request = new Request.Builder()
                    .url(serverIP.getIP())
                    .post(requestBody)
                    .build();

            Response response;
            try {
                response = client.newCall(request).execute();
                ou_response = response.body().string();
                response.body().close();
                if (ou_response != null) {
                    try {
                        JSONObject postObj = new JSONObject(ou_response);
                        JSONArray postsArray = postObj.getJSONArray("posts");
                        infoModels = new ArrayList<>();

                        for (int i = 0; i < postsArray.length(); i++) {
                            JSONObject postObject = postsArray.getJSONObject(i);
                            int id = postObject.getInt("id");
                            String title = postObject.getString("title");
                            Log.d("Data", "Post id: " + id);
                            Log.d("Data", "Post title: " + title);

                            //Use the title and id as per your requirement
                            infoModels.add(new okHTTP_dataProvider(
                                    postObject.getString("title"),
                                    postObject.getInt("id")));
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return ou_response;
        }

        @Override
        protected void onPostExecute(String result) {
            CustomProcessDialog.dissmis();
            if (result != null) {
                bus.post(infoModels);
            }
        }
    }
}
04-16 16:04:34.780 20445-20445/com.tellfa.okhttpproject E/AndroidRuntime:致命异常:主java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.tellfa.okhttpproject/com.tellfa.okhttpproject.Activities.okHTTP_Page}: org.greenrobot.eventbus.eventbus异常:订户类 com.tellfa.okhttpproject.Activities.okHTTP_页面及其超类 在处没有@Subscribe注释的公共方法 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2204) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2254) 在android.app.ActivityThread.access$600(ActivityThread.java:141) android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 位于android.os.Handler.dispatchMessage(Handler.java:99) Looper.loop(Looper.java:137)位于 main(ActivityThread.java:5069)位于 java.lang.reflect.Method.Invokenactive(本机方法)位于 java.lang.reflect.Method.invoke(Method.java:511)位于 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) dalvik.system.NativeStart.main(本机方法)由以下原因引起: org.greenrobot.eventbus.eventbus异常:订户类 com.tellfa.okhttpproject.Activities.okHTTP_页面及其超类 在处没有@Subscribe注释的公共方法 org.greenrobot.eventbus.subscriberMethodFindSubscriberMethods(SubscriberMethodFinder.java:67) 位于org.greenrobot.eventbus.eventbus.register(eventbus.java:136) com.tellfa.okhttpproject.Activities.okHTTP_Page.onCreate(okHTTP_Page.java:23) 在android.app.Activity.performCreate(Activity.java:5104)的 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1092) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2254) 在android.app.ActivityThread.access$600(ActivityThread.java:141) android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 位于android.os.Handler.dispatchMessage(Handler.java:99) Looper.loop(Looper.java:137)位于 main(ActivityThread.java:5069)位于 java.lang.reflect.Method.Invokenactive(本机方法)位于 java.lang.reflect.Method.invoke(Method.java:511)位于 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) dalvik.system.NativeStart.main(本机方法)


您需要添加一个带有@Subscribe注释的方法。该方法还需要采用一个参数,即您正在发布的类型。因此,将此添加到您的
AppCompatActivity

@Subscribe
public void subscribeMethod(List infoModels) {
    // Do stuff...
}
@Subscribe
public void subscribeMethod(InfoModelsEvent infoModelsEvent) {
    // Do stuff...
}
bus.post(new InfoModelsEvent(infoModels));
@Subscribe
public void onEvent(List<okHTTP_dataProvider> infoModels) {

};
@Subscribe
public void onEventMainThread(){

}