暂时存储JSON对象,并在互联网可用时将其发布到Volley

时间:2018-10-25 05:57:16

标签: android json rest android-volley

我在应用程序中使用Volley。我正在使用REST Api向服务器发送数据。这是对服务器的JSON POST请求。

private void add() {
        String NetworkStatus = biz.fyra.bookapp.utils.NetworkStatus.checkConnection(getContext());
        if (NetworkStatus.equals("false")) {
            alert.noInternetAlert(getActivity());
        } else {
            JSONObject info = new JSONObject();
            try {
                info.put("name", full_name);
                info.put("phone", foodie_contact);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, ApiUrls.ADD, info, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                }
            }) {
            };
            AppController.getInstance().addToRequestQueue(request);
        }
    }  

如果可以使用Internet,则可以将数据发布到服务器。但是,如果没有Internet,则需要将该JSON对象临时存储在某个地方;当Internet可用时,我需要将所有JSON对象发布到本地存储的服务器中。如何实现呢?

1 个答案:

答案 0 :(得分:2)

要实现此目的,您必须遵循以下步骤。

  1. 检查互联网是否已连接。
  2. 如果已连接互联网,请拨打电话。
  3. 如果未连接互联网,则可以将Json转换为字符串并保存 共享首选项或数据库中。
  4. 然后,您必须创建一个广播接收器,以检查Internet连接和
  5. 当您收到有关有效互联网的消息时,您需要发送待处理数据 到服务器。

更新 用于创建广播​​接收器

public class NetworkChangeReceiver extends BroadcastReceiver {

@Override
public void onReceive(final Context context, final Intent intent) {
    final ConnectivityManager connMgr = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    final android.net.NetworkInfo wifi = connMgr
            .getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    final android.net.NetworkInfo mobile = connMgr
            .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

    if (wifi.isAvailable() || mobile.isAvailable()) {
        Log.d("Network Available ", "Flag No 1");
    }
}

}

然后在Menifest文件中的Application标签中添加Intent Filter

<receiver android:name=".NetworkChangeReceiver" >
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>