I have craeted a class named as EventService ,the function of the class is to perform a network request using volley and return the result as Arraylist of class type Eventlist, the volley response is then used as a parameter in intilizing the recyclerview adapter. i'm looking for an assistance on how to work out. i have tried the code below and my app keeps on crashing.
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;
}
}
You can use interface callbacks to return your results to the fragment:
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);
}
}
this is a gist of how this can be done with callbacks. You can find more samples similar to this. Feel free to ask if you need more clarification
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.