如何在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(){
}