首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >App42安卓离线存储不起作用

App42安卓离线存储不起作用
EN

Stack Overflow用户
提问于 2016-06-19 19:09:20
回答 1查看 78关注 0票数 0

我正在创建一个Android应用程序,并且我想使用脱机存储。因此,我创建了测试应用程序来测试app42 BaaS。已在TestApplication.java中初始化App42。应用程序必须将信息保存在脱机存储中( JSON字符串中关于“Tonya”的信息),并且当Internet连接可用时,它必须将此信息发送到online DB。根据日志,“Tonya”是离线写的,但当我使用“findAllDocuments”时,它不会出现。当互联网连接变得可用时,它没有与在线数据库同步。我尝试过使用不同的Android和SDK版本,但都没有帮助。我做错了什么?

这是AndroidManifest.xml:

代码语言:javascript
复制
 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.luka94.testapplication">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
    <application
        android:name=".TestApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name="com.shephertz.app42.paas.sdk.android.App42BroadcastReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
        <receiver android:name="com.shephertz.app42.paas.sdk.android.AlarmReceiver"/>
        <service android:name="com.shephertz.app42.paas.sdk.android.App42DataSyncService"/>
    </application>
</manifest>

这是TestApplication.java:

代码语言:javascript
复制
package com.luka94.testapplication;

import android.app.Application;

import com.shephertz.app42.paas.sdk.android.App42API;
import com.shephertz.app42.paas.sdk.android.App42CacheManager;
import com.shephertz.app42.paas.sdk.android.App42Response;
import com.shephertz.app42.paas.sdk.android.App42Exception;
import com.shephertz.app42.paas.sdk.android.App42BadParameterException;
import com.shephertz.app42.paas.sdk.android.App42NotFoundException;
import com.shephertz.app42.paas.sdk.android.App42CallBack;
import com.shephertz.app42.paas.sdk.android.storage.StorageService;
import com.shephertz.app42.paas.sdk.android.user.User;
import com.shephertz.app42.paas.sdk.android.user.User.Profile;
import com.shephertz.app42.paas.sdk.android.user.User.UserGender;
import com.shephertz.app42.paas.sdk.android.user.UserService;

public class TestApplication extends Application {

    private UserService userService;
    private StorageService storageService;
    public static final String DB_NAME = "DBNAME";

    @Override
    public void onCreate() {
        super.onCreate();
        App42API.initialize(getApplicationContext(), "KEY_1", "KEY_2");
        App42CacheManager.setPolicy(App42CacheManager.Policy.NETWORK_FIRST);
        App42CacheManager.setExpiryInMinutes(60);
        userService = App42API.buildUserService();
        storageService = App42API.buildStorageService();
        App42API.setOfflineStorage(true);
    }

    public UserService getUserService() {
        return userService;
    }
    public StorageService getStorageService() {return storageService;}

}

这是MainActivity.java:

代码语言:javascript
复制
package com.luka94.testapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import com.shephertz.app42.paas.sdk.android.App42API;
import com.shephertz.app42.paas.sdk.android.App42CallBack;
import com.shephertz.app42.paas.sdk.android.storage.Storage;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private TestApplication mApplication;
    private String json;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mApplication = (TestApplication) getApplication();

        json = "{\"name\":\"Tonya\",\"age\":\"28\",\"phone\":\"xxx-xxx-xxx\"}";
        testWriteData();
        getRecord();
    }

    private void getRecord() {
        mApplication.getStorageService().findAllDocuments(TestApplication.DB_NAME,
                "test", new App42CallBack() {
                    @Override
                    public void onSuccess(Object o) {
                        ArrayList<Storage.JSONDocument> jsonDocList = ((Storage) o).getJsonDocList();

                        if (!jsonDocList.isEmpty()) {
                            Log.d("TestApp", "objects finded");

                            for (int i = 0; i < jsonDocList.size(); i++) {
                                Log.d("TestApp", String.format("%s", jsonDocList.get(i).toString()));
                            }
                        }
                        Log.d("TestApp", String.format("is from online storage: %b", ((Storage) o).isOfflineSync()));
                        Log.d("TestApp", String.format("is from cache: %b", ((Storage) o).isFromCache()));
                    }

                    @Override
                    public void onException(Exception e) {
                        Log.d("TestApp", e.getMessage());
                    }
                });
    }

    private void testWriteData() {
        mApplication.getStorageService().insertJSONDocument(TestApplication.DB_NAME, "test", json, new App42CallBack() {
            @Override
            public void onSuccess(Object response) {
                Storage storage = (Storage) response;
                if (storage.isOfflineSync()) {
                    Log.d("TestApp", "writed offline");
                } else {
                    Log.d("TestApp", "writed online");
                }
            }

            @Override
            public void onException(Exception ex) {
                System.out.println("Exception Message : " + ex.getMessage());
            }
        });
    }

}
EN

回答 1

Stack Overflow用户

发布于 2016-08-04 13:36:11

App42离线存储存储类型为GET的调用的响应。当再次进行相同的接口调用时,根据您设置的策略,将向您发送响应,响应可能来自服务器或缓存。只有在方法签名相同的情况下,它才能工作。它会缓存该请求的响应,并为下一次调用提供服务。如果您正在进行不同的API调用来检索相应的数据,您将不会获得响应数据。你也可以看看它的了解更多信息。

我希望它能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37906576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档