java - Web API 调用太慢

标签 java android api

我有一个 Android 应用程序,它的大部分功能都消耗 API。我的客户提示从 Web API 检索数据非常慢。我想知道是什么原因造成的。

以下是我调用电话的基本结构:

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;

我从进度对话框中调用此方法,以便在从 Web API 检索数据时显示加载程序。有一个更好的方法吗?或者我的 android 代码会影响它的性能吗?

这是调用进度对话框上的代码。

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();
            }

        });

这里是实际调用连接到 Web api 的 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;

正如您所注意到的,我这里有两个 api 调用。

我真的很想加快数据检索速度。或者我正在使用的 api 这么慢吗?大家有什么想法吗?谢谢!

最佳答案

您可能知道,有许多因素会影响 HTTP 服务调用,客户端代码只是其中之一:

  1. 网络速度和延迟
  2. 服务器可用性和负载
  3. 数据负载大小
  4. 客户端设备资源
  5. 客户端代码

您确实需要确定瓶颈在哪里,以便知道在哪里尝试优化。此外,您应该确保服务器使用 Gzip 来压缩有效负载并将以下内容添加到您的客户端代码中:

request.setHeader("Accept-Encoding", "gzip");

关于java - Web API 调用太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22873501/

相关文章:

java - 你能解释一下这个 Java HashMap 键冲突吗?

java - SQLite只创建2个表

java - 更新 Cardview 布局后,Listview Onclick 监听器不工作

jquery - Ajax请求失败,不明白为什么

java - 如何在 ant 的 build.xml 中的目标标记内添加属性标记

java - 找不到符号方法 openFileInput(String)

java - 在heroku上部署spring boot时Google api重定向问题

android - Notification.Builder 类型未定义方法 build()

java - JPOS Restful API发送和接收数据

java - 在 android 中调用 API 并使用 Retrofit 2 收到此错误 :Response{protocol=h2, code=200, message=, url=https ://api. com/video/list-video.php}