I have an android app that most of its feature consumes an API. My client complained that the retrieving of data from the web api is very slow. I wonder what's causing this.
Here's a basic structure of how I do my calls:
String returnString = "";
    token = tokenBuilder.generateToken("Customers/All");
    try {
    HttpGet request = new HttpGet(apiUrl + "CustomerRewards/All?customerId=" + id);
    request.setHeader(HTTP.CONTENT_TYPE, "application/json");
    request.setHeader("AccountId", headerAccountId);
    request.setHeader("StoreId", headerStoreId);
    request.setHeader("AppKey", headerAppKey);
    request.setHeader("Token", token);
    HttpClient client = new DefaultHttpClient();
    HttpResponse response = client.execute(request);
    String responseString = EntityUtils.toString(response.getEntity());
    Log.i("Api Message", responseString);
    returnString = responseString;
    } catch (Exception e) {
        returnString = e.getMessage();
    }
    return returnString;
I'm calling this method from a progress dialog in order to display a loader while, retrieving data from the web API. Is there a better way to do this? Or is somewhat my android code affects its performance?
Here's the code on the calling progress dialog.
rewardsErrorMessage = "";
    progressBar = new ProgressDialog(this);
    progressBar.setCancelable(true);
    progressBar.setMessage("Loading info ...");
    progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progressBar.setProgress(0);
    progressBar.setMax(100);
    progressBar.setCancelable(false);
    progressBar.show();
    apiLoadStatus = false;
    new Thread(new Runnable() {
        public void run() {
            while (!apiLoadStatus) {
                apiLoadStatus = RewardApi();
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                        e.printStackTrace();
                      }
                    }
                if (apiLoadStatus) {
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                        progressBar.dismiss();
                    }
                  }}).start();
        progressBar.setOnDismissListener(new OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialog) {
                SetValues();
            }
        });
And here's the method that actually calls the api class that connects to the web api
ApiConnection api = new ApiConnection();
    try {
        Log.i("CustomerId", customerInfos.getString("customer_id", ""));
        transactionMessage = api.GetTransactions(customerInfos.getString("customer_id", ""));
        availableRewardsMessage = api.GetCustomerRewards(customerInfos.getString("customer_id", ""));
        try
        {
            if(transactionMessage.contains("Timestamp"))
            {
                Log.i("Transaction", "Success");
                GetPoints(transactionMessage);
            }
            if(!availableRewardsMessage.equals("[]") && !availableRewardsMessage.equals("[]"))
            {
                JSONObject rewardsJson = new JSONObject(availableRewardsMessage);
                availableRewardsMessage = rewardsJson.getString("AvailableRewards");
                hasRewards = true;
            }
            return true;
        }
        catch(Exception e)
        {
            rewardsErrorMessage = transactionMessage.replace('[', ' ').replace(']', ' ').replace('"', ' ');
        }
    } catch(Exception e) {
        e.printStackTrace();
        rewardsErrorMessage = e.getMessage();
        return true;
    }
    return true;
As you notice, I have two api calls here.
I really would like to speed up the retrieving of data. Or is the api I'm consuming that slow? Any ideas guys? Thanks!
 
    