java - 如何在类和片段之间进行通信。我创建了一个类,我希望它执行网络请求并返回一个数组列表
问题描述
我创建了一个名为 EventService 的类,该类的功能是使用 volley 执行网络请求并将结果作为类类型 Eventlist 的 Arraylist 返回,然后将 volley 响应用作 intilizing recyclerview 适配器的参数。我正在寻找有关如何锻炼的帮助。我已经尝试了下面的代码,但我的应用程序不断崩溃。
public class Extra extends Fragment {
ArrayList<EventList> eventLists=new ArrayList<>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Eventservice eventservice=new Eventservice(getContext());
eventLists=eventservice.getEventLists();
View view=inflater.inflate(R.layout.eventrecyclerview, container, false);
RecyclerView recyclerView=view.findViewById(R.id.recyclerview);
EventAdapter eventAdapter=new EventAdapter(getContext(),eventLists);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(eventAdapter);
// Inflate the layout for this fragment
return view;
}
}
public class Eventservice {
Context context;
ArrayList<EventList> eventLists=new ArrayList<>();
String url="https://ipAddress/stdportal/events/getAllevents.php";
JSONObject event;
private static final String TAG = "Eventservice";
public Eventservice(Context context) {
this.context = context;
}
public ArrayList<EventList> getEventLists() {
JsonArrayRequest jsonArrayRequest=new JsonArrayRequest(Request.Method.POST, url, null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
int count=0;
while (count<=response.length())
{
try {
event =response.getJSONObject(count);
EventList eventList=new EventList(
event.getString("date"),
event.getString("venue"),
event.getString("eventdescription"),
event.getString("eventtittle")
);
eventLists.add(eventList);
count++;
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
Mysigleton.getInstance(context).addRequest(jsonArrayRequest);
return eventLists;
}
}
解决方案
您可以使用接口回调将结果返回到片段:
public class Extra extends Fragment implements EventService.NetworkResult {
ArrayList<EventList> eventLists=new ArrayList<>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Eventservice eventservice=new Eventservice(getContext(),this);
View view=inflater.inflate(R.layout.eventrecyclerview, container, false);
RecyclerView recyclerView=view.findViewById(R.id.recyclerview);
EventAdapter eventAdapter=new EventAdapter(getContext(),eventLists);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(eventAdapter);
// Inflate the layout for this fragment
return view;
}
@Override
void onSuccess(List<EventList> eventList){
eventLists.addAll(eventList);
eventAdapter.notifyDatasetchanged();
}
@Override
void onError(VolleyError error){
//update UI for errors
}
}
public class Eventservice {
NetworkResult networkResult;
Context context;
ArrayList<EventList> eventLists=new ArrayList<>();
String url="https://ipAddress/stdportal/events/getAllevents.php";
JSONObject event;
private static final String TAG = "Eventservice";
public Eventservice(Context context,NetworkResult networkResult) {
this.context = context;
this.networkResult = networkResult;
}
public void getEventLists() {
JsonArrayRequest jsonArrayRequest=new JsonArrayRequest(Request.Method.POST, url, null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
int count=0;
while (count<=response.length())
{
try {
event =response.getJSONObject(count);
EventList eventList=new EventList(
event.getString("date"),
event.getString("venue"),
event.getString("eventdescription"),
event.getString("eventtittle")
);
eventLists.add(eventList);
count++;
networkResult.onSuccess(eventLists);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
networkResult.onError(error);
}
});
Mysigleton.getInstance(context).addRequest(jsonArrayRequest);
return eventLists;
}
interface NetworkResult{
void onSuccess(List<EventList> eventList);
void onError(VolleyError error);
}
}
这是如何使用回调完成此操作的要点。您可以找到更多与此类似的示例。随时询问您是否需要更多说明
推荐阅读
- powerbi - 直接查询 - 最新版本中的限制
- scala - 在 Spark 连接之后使用 scala 对象
- java - 确保不可变列表中可变对象的不变性
- fullcalendar - 如何在 Oracle Apex 中实现 Fullcalendar TimeGrid 视图
- appium - 通过 appium 以编程方式使用 chromedriver_autodownload 功能
- php - Facebook Business SDK PHP - 无法获取广告系列字段
- vulkan - 何时应该释放从另一个 API 导入到 Vulkan 的 VkDeviceMemory 对象?
- angular - 错误:BrowserModule 已加载。在角度 7
- python-3.x - AttributeError: 'DataFrame' 对象在使用 SMOTE 时没有属性 'name'
- git - git:集体分段合并分支