Here is my code:-
Goals.java class
public class Goals extends AppCompatActivity{
private ArrayList<Goal> result;
private RecyclerView.Adapter adapter;
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
private ArrayList<Goal> dataFromServer;
private Toolbar toolbar;
//This is for back button
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
startActivity(new Intent(this, MainActivity.class));
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.goal_list);
recyclerView=(RecyclerView) findViewById(R.id.goal_recycler_view);
toolbar=(Toolbar) findViewById(R.id.toolbar);
recyclerView.setHasFixedSize(true);
layoutManager=new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
setSupportActionBar(toolbar);
//FOr back button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
//fetch goal list from server and also its related action
getData();
//Send Data to GoalAdaptor
showData();
}
private void showData() {
Log.i("Show Date","Enter");
System.out.println("Result Array List"+result.toString());
adapter=new goalAdaptor(this, result);
recyclerView.setAdapter(adapter);
}
private void getData() {
result=new ArrayList<>();
DownloadPlansFromServer server= new DownloadPlansFromServer();
server.execute();
}
class DownloadPlansFromServer extends AsyncTask<Void,Void,Boolean>
{
private ProgressDialog progressDialog;
Boolean planActive=false;
protected void onPreExecute() {
// NOTE: You can call UI Element here.
//UI Element
progressDialog = new ProgressDialog(Goals.this);
progressDialog.setMessage("Downloading Plans Data..");
progressDialog.show();
}
@Override
protected Boolean doInBackground(Void... params) {
try {
Response.Listener listener=new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response) {
try {
System.out.println("Inside the response");
// Parsing json object response
// response will be a json object
System.out.println("Output is "+response.toString());
//Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_LONG).show();
planActive=response.getBoolean("success");
if (planActive)
{
JSONArray plansArray=response.getJSONArray("response");
//get Plans Details
for (int p=0;p<plansArray.length();p++)
{
JSONObject plan=plansArray.getJSONObject(p);
//get Goals Details
JSONObject planGoals=plan.getJSONObject("goal");
Goal goal=new Goal();
goal.setGoal_name("Goal Name:- "+planGoals.getString("goal_name"));
Log.i("Goal Name is",planGoals.getString("goal_name"));
JSONObject currentValue=planGoals.getJSONObject("current_value");
JSONObject targetValue=planGoals.getJSONObject("target_value");
//Get the values parameter
ArrayList<String> parameterList=getTheParameter(planGoals.getString("goal_id"));
if (parameterList.isEmpty())
{
System.out.println("Problem WHile Processing the parameter ");
}
else
{
String goalDescription="Reduce the value from";
StringBuilder currentStringBuilder=new StringBuilder();
for (int k=0;k<parameterList.size();k++)
{
currentStringBuilder.append(currentValue.getString(parameterList.get(k))+"/");
}
StringBuilder targetStringBuilder=new StringBuilder();
for (int k=0;k<parameterList.size();k++)
{
targetStringBuilder.append(targetValue.getString(parameterList.get(k))+"/");
}
goal.setGoal_description(goalDescription+currentStringBuilder.toString()+" to "+ targetStringBuilder.toString());
}
//Add the result to the array
result.add(goal);
}
}
}
catch (JSONException k)
{
Log.i("On Response",k.getMessage());
k.printStackTrace();
}
}
};
Response.ErrorListener errorListener=new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Handle Error
if (error instanceof TimeoutError || error instanceof NoConnectionError) {
error.printStackTrace();
Toast.makeText(getApplicationContext(), " this Network Error", Toast.LENGTH_SHORT).show();
} else if (error instanceof AuthFailureError) {
//TODO
error.printStackTrace();
Toast.makeText(getApplicationContext(), "User not authorized", Toast.LENGTH_SHORT).show();
} else if (error instanceof ServerError) {
//TODO
error.printStackTrace();
Toast.makeText(getApplicationContext(), "Server error", Toast.LENGTH_SHORT).show();
} else if (error instanceof NetworkError) {
//TODO
error.printStackTrace();
Toast.makeText(getApplicationContext(), "Network Error", Toast.LENGTH_SHORT).show();
} else if (error instanceof ParseError) {
//TODO
error.printStackTrace();
Toast.makeText(getApplicationContext(), "Error consuming request", Toast.LENGTH_SHORT).show();
}
else error.printStackTrace();
}
};
String plan_url=Constants.url+"plan";
JsonObjectHeader customRequest=new JsonObjectHeader(plan_url,null, listener, errorListener);
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
requestQueue.add(customRequest);
System.out.println("After custom Request");
planActive=true;
}catch (Exception e)
{
e.printStackTrace();
}
return planActive;
}
protected void onPostExecute(Boolean unused) {
// NOTE: You can call UI Element here.
// Close progress dialog
progressDialog.dismiss();
if (unused)
{
Log.i("Get Plan","Yes");
//showData();
}
else
Toast.makeText(getApplicationContext(),"No Plans Found",Toast.LENGTH_LONG).show();
}
}
private ArrayList<String> getTheParameter(String goal_id) {
ArrayList<String> arrayList=new ArrayList<>();
if (goal_id.equals("bp"))
{
arrayList.add("systolic");
arrayList.add("diastolic");
return arrayList;
}
else
{
arrayList.add(null);
return arrayList;
}
}
}
The problem is:- Before getting the response from server, the onPostExecute() function executed. So I will get empty result arraylist.
JsonObjectHeader class is the basic volley class to fetch data from server.