/**
   * loadCache
   *
   * @throws IOException
   */
  @SuppressWarnings("unused")
  private void loadCache() {
    Context pContext = mContext.get();
    if (null == pContext) return;

    // Get content.
    String strContent = null;
    FileInputStream pInputStream = null;
    try {
      pInputStream = pContext.openFileInput(CACHE_FILE);

      byte aBytes[] = new byte[pInputStream.available()];
      pInputStream.read(aBytes);

      strContent = new String(aBytes);

      // Parse the json object.
      JSONObject pRoot = new JSONObject(strContent);
      JSONArray aArray = pRoot.optJSONArray(JSON_TAG);
      final int nLength = (null != aArray ? aArray.length() : 0);
      for (int nIdx = 0; nIdx < nLength; nIdx++) {
        JSONObject pObject = aArray.getJSONObject(nIdx);
        MsgEntity pEntity = new MsgEntity();
        pEntity.parse(pObject);

        // Save to array.
        this.append(pEntity);
      }

    } catch (FileNotFoundException aException) {
      aException.printStackTrace();
      strContent = null;
    } catch (IOException aException) {
      aException.printStackTrace();
      strContent = null;
    } catch (JSONException aException) {
      aException.printStackTrace();
    } finally {
      if (null != pInputStream) {
        try {
          pInputStream.close();
        } catch (IOException aException) {
          aException.printStackTrace();
        }
        pInputStream = null;
      }
    }
  }
  /** saveCache Save cache to local storage. */
  public void saveCache() {
    if (!mUpdated) {
      // Do nothing when records are not updated.
      return;
    }

    final int nSize = (null != mCache ? mCache.size() : 0);
    if (0 >= nSize) return;

    // Save cache to local storage.
    Context pContext = mContext.get();
    if (null == pContext) return;

    FileOutputStream pOutputStream = null;
    try {
      JSONObject pRoot = new JSONObject();
      JSONArray aArray = new JSONArray();
      pRoot.put(JSON_TAG, aArray);

      // Save the content.
      for (MsgEntity entity : mCache) {
        aArray.put(entity.toJson());
      }

      pOutputStream = pContext.openFileOutput(CACHE_FILE, Context.MODE_PRIVATE);
      pOutputStream.write(pRoot.toString().getBytes());

    } catch (FileNotFoundException aException) {
      aException.printStackTrace();
    } catch (IOException aException) {
      aException.printStackTrace();
    } catch (JSONException aException) {
      aException.printStackTrace();
    } finally {
      if (null != pOutputStream) {
        try {
          pOutputStream.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
        pOutputStream = null;
      }
    }
  }