在 Android 中将数据从网络服务器写入本地数据库速度缓慢

Slow in writing data from webserver to Local DB in Android

我正在尝试从我的网络服务器中提取数据并使用服务在后台将它们添加到本地数据库中。数据正在毫无问题地存储到本地数据库中,但是在发生这种情况时 phone 变慢了(有一些拖拽)。只是想知道我在写入数据库时​​是否正确地做事,或者是否有更好更快的方法。

我正在使用 AsyncHttpClient 库从网络服务器中提取数据。

final RequestParams requestParams = new RequestParams();
        final String uploadWebsite = url_acc_details;

        AsyncHttpClient client = new AsyncHttpClient();
        client.post(uploadWebsite, requestParams, new JsonHttpResponseHandler() 
        {
            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) 
            {
                try 
                {
                    success = response.getInt(TAG_SUCCESS);

                    if (success == Integer.parseInt(getResources().getString(R.string.successvalue)))
                    {
                        details = response.getJSONArray(TAG_DETAIL);
                        for (int i = 0; i < details.length(); i++) 
                        {
                            JSONObject c = details.getJSONObject(i);

                            acc_iD = c.getString(TAG_ACC_ID);
                            acc_nAme = c.getString(TAG_ACC_NAME);
                            acc_Image = c.getString(TAG_ACC_IMAGE);
                            acc_active = c.getString(TAG_ACC_ACTIVE);
                            acc_priority = c.getString(TAG_ACC_PRIORITY);
                            acc_creator = c.getString(TAG_ACC_CREATOR);

                            dblocal.setAccDetails(Integer.valueOf(acc_iD), acc_nAme, acc_Image, acc_active, acc_priority, acc_creator);
                        }
                    }
                } 
                catch (JSONException e) 
                {
                    e.printStackTrace();
                }
                stopSelf();

            }

            @Override
            public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) 
            {
                super.onFailure(statusCode, headers, throwable, errorResponse);
                stopSelf();
            }
        });     

同样,我在 bankground 同时启动三个服务 运行,逻辑相同,但获取不同的细节。

如果有人能告诉我如何更快更好地完成上述过程,那就太好了?

首先,您应该为 AsyncHttpClient 使用单例模式。这样,您就不必为每个请求重新定义新资源。

public class MyAsyncHttpClient extends AsyncHttpClient {
    private static MyAsyncHttpClient client;

    private MyAsyncHttpClient() {

    }

    public static MyAsyncHttpClient getClient() {
        if (client == null) {
            client = new MyAsyncHttpClient();
            // do whatever, setCookieStore, addHeader, etc
        }      


        return client;
    }
}

然后在你的 asyncTask

替换new AsyncHttpClient()

MyAsyncHttpClient.getClient()

其次,同样在后台进行数据库操作。 声明接口:

public interface DatabaseOperationListener {
    public void perform();
    public void onFinish();
}

...


client.post(uploadWebsite, requestParams, new JsonHttpResponseHandler() {
    @Override
    public void onSuccess(int statusCode, Header[] headers, JSONObject response) 
    {
        new DatabaseTask(new DatabaseOperationListener() {
            @Override
            public void perform() {
                DatabaseManager dblocal = DatabaseManager.getInstance();
                dblocal.setAccDetails(Integer.valueOf(acc_iD), acc_nAme, acc_Image, acc_active, acc_priority, acc_creator);

            }

            @Override
            public void onFinish() {
                // do something, perform another request, etc
            }
        }).execute();

   @Override
   public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable error) {
       super.onFailure(statusCode, headers, errorResponse, error);
       // do something
   }
});

请注意,我还有一个用于数据库的 Singleton 实例。