Tizen开发 - Data Control

Data Control 只能由service application提供,有两种Tizen::App::SqlDataControl和Tizen::App::MapDataControl。

1. Using Data Controls
可以通过 Tizen::App::AppManager 来获取Data Control,它以provider ID 为主要标示。
1)SqlDataControl
用provider ID调用AppManager::GetSqlDataControlN()获得Data Control,然后可以Select(), Insert(), Update() 和 Delete();
使用Tizen::App::ISqlDataControlResponseListener 的接口OnSqlDataControlSelectResponseReceived(), OnSqlDataControlInsertResponseReceived(), OnSqlDataControlUpdateResponseReceived(), or OnSqlDataControlDeleteResponseReceived()来获取返回数据。
2)MapDataControl
用provider ID调用AppManager::GetMapDataControlN()获得Data Control,然后可以 GetValue(), AddValue(), SetValue(), and RemoveValue();
使用Tizen::App::IMapDataControlResponseListener 的接口OnMapDataControlGetValueResponseReceived(), OnMapDataControlAddValueResponseReceived(), OnMapDataControlSetValueResponseReceived(), or OnMapDataControlRemoveValueResponseReceived()来获取返回数据。
3)Data Control life-cycle


2. Developing with Data Controls
1)export the data of your service application: 需要在manifest中配置;
2)SqlDataControl
实现 Tizen::App::ISqlDataControlProviderEventListener 接口,并使用Tizen::App::DataControlProviderManager 的接口SetSqlDataControlProviderEventListener()注册。
要实现ISqlDataControlProviderEventListener接口中的OnSqlDataControlSelectRequestReceived(), OnSqlDataControlInsertRequestReceived(), OnSqlDataControlUpdateRequestReceived(), or OnSqlDataControlDeleteRequestReceived()来处理请求;
3)MapDataControl
实现 Tizen::App::IMapDataControlProviderEventListener接口,并使用Tizen::App::DataControlProviderManager 的接口SetMapDataControlProviderEventListener()注册。
要实现 IMapDataControlProviderEventListener接口中的OnMapDataControlGetValueRequestReceived(), OnMapDataControlAddValueRequestReceived(), OnMapDataControlSetValueRequestReceived(), or OnMapDataControlRemoveValueRequestReceived()来处理请求。

4)Handling data control requests流程:


3. 实例
1)SqlDataControl (Using a SqlDataControl )
获取Data Control实例

String providerId(L"http://tizen.org/datacontrol/provider/example");
SqlDataControl* pDc = AppManager::GetSqlDataControlN(providerId);

call Select()
String dataId(L"test");
String person(L"person");
String number(L"number");
RequestId reqId;


ArrayList columnList;
columnList.Construct();
columnList.Add(person);
columnList.Add(number);
String where(L"group = 'friend'");
String order(L"person ASC");

pDc->Select(dataId, &columnList, &where, &order, reqId);
ArrayList.RemoveAll();

实现Tizen::App::ISqlDataControlResponseListener 接口
class ExampleSqlDataControlResponseListener: 
   public Tizen::App::ISqlDataControlResponseListener

实现OnSqlDataControlInsertResponseReceived()
void
ExampleSqlDataControlResponseListener::OnSqlDataControlInsertResponseReceived(RequestId reqId, 
                                                                              const String& providerId,
                                                                              const String& dataId,
                                                                              long long  insertRowId,
                                                                              bool providerResult,
                                                                              const String* pErrorMsg)
{
   // __insertRowId is a private variable of this class
   __insertRowId = insertRowId;


   return;
}

为Data Control设置回应监听者
ExampleSqlDataControlResponseListener* pResponseListener = null;


pResponseListener = new ExampleSqlDataControlResponseListener();
pDc->SetSqlDataControlResponseListener(pResponseListener);

delete pDc;

2) SqlDataControl (Providing a SqlDataControl)
在manifest中设置导出Data Control

实现Tizen::App::ISqlDataControlProviderEventListener 接口
class MyServiceApp:
   public Tizen::App::ServiceApp,
   public Tizen::App::ISqlDataControlProviderEventListener

实现 OnSqlDataControlSelectRequestReceived()
void
MyServiceApp::OnSqlDataControlSelectRequestReceived(RequestId reqId,
                                                    const String& providerId,
                                                    const String& dataId,
                                                    const IList* pcolumnList,
                                                    const String* pWhere,
                                                    const String* pOrder)
{
   Database* pDb = null;
   DbEnumerator* pEnum = null;
   String errorMsg;
   result r = E_SUCCESS;


   if (providerId == L"http://tizen.org/datacontrol/provider/example")
   {
      if (dataId == L"test")
      {
         String sql = SqlStatementBuilder::CreateSelectStatement(dataId, pColumnList,
                                                                 pWhere, pOrder,
                                                                 null, null, null);
         String dbPath(App::GetInstance()->GetAppRootPath() + L"data/test.db");


         pDb = new Database();


         r = pDb->Construct(dbPath, "r");


         pEnum = pDb->QueryN(sql);
         r = GetLastResult();


      }
      else
      {
         // Error handling
      }
   }
   else
   {
      // Error handling
   }


   r = DataControlProviderManager::GetInstance()->SendSqlDataControlSelectResult(reqId, pDbEnum);


   delete pEnum;
   delete pDb;

   return;
}

实现OnSqlDataControlInsertRequestReceived()
void
MyServiceApp::OnSqlDataControlInsertRequestReceived(RequestId reqId, 
                                                    const Tizen::Base::String& providerId,
                                                    const Tizen::Base::String& dataId, 
                                                    const Tizen::Base::Collection::IMap& insertMap)
{
   Database* pDb = null;
   String errorMsg;
   long long insertRowId = -1;
   result r = E_SUCCESS;


   if (providerId == L"http://tizen.org/datacontrol/provider/example")
   {
      if (dataId == L"test")
      {
         String sql = SqlStatementBuilder::CreateInsertStatement(dataId, insertMap);


         String dbPath(App::GetInstance()->GetAppDataPath() + L"test.db");


         pDb = new Database();


         r = pDb->Construct(dbPath, "a+");


         r = pDb->ExecuteSql(sql, true);


         insertRowId = pDb->GetLastInsertRowId();


      }
      else
      {
         // Error handling
      }
   }
   else
   {
      // Error handling
   }


   r = DataControlProviderManager::GetInstance()->SendSqlDataControlInsertResult(reqId, insertRowId);


   delete pDb;


   return;
}

使用Tizen::App::DataControlProviderManager 的SetSqlDataControlProviderListener()设置提供Data Control的listener
bool
MyServiceApp::OnAppInitializing(Tizen::App::AppRegistry& appRegistry)
{
   result r = E_SUCCESS;
   DataControlProviderManager* pDcMgr = DataControlProviderManager::GetInstance();
   r = pDcMgr->SetSqlDataControlProviderEventListener(this);


   return true;
}

3)MapDataControl(Using a MapDataControl)
获取Tizen::App::MapDataControl 实例
String providerId(L"http://tizen.org/datacontrol/provider/example");
MapDataControl* pDc = AppManager::GetMapDataControlN(providerId);

调用GetValue()
String dataId(L"test");
String person(L"person");


pDc->GetValue(dataId, person, reqId);

实现Tizen::App::IMapDataControlResponseListener 
class ExampleMapDataControlResponseListener: 
   public Tizen::App::IMapDataControlResponseListener

实现OnMapDataGetValueResponseReceived()
void
ExampleMapDataControlResponseListener::
OnMapDataControlGetValueResponseReceived(RequestId reqId, 
                                         const String& providerId,
                                         const String& dataId,
                                         IList& resultValueList,
                                         bool providerResult,
                                         const String* pErrorMsg)
{
   int count = resultValueList.GetCount();
   for (int i = 0; i < count; i++)
   {
      String pPerson = static_cast< String* >(resultValueList.GetAt(i));
      AppLog("%dth person: %ls", i, pPerson->GetPointer());
   }


   return;
}

设置实例的回应监听
ExampleMapDataControlResponseListener* pResponseListener = null;
pResponseListener = new ExampleMapDataControlResponseListener();
pDc->SetMapDataControlResponseListener(pResponseListener);

delete pDc;

4)MapDataControl (Providing a MapDataControl)
在manifest中设置导出Data Control

实现Tizen::App::IMapDataControlProviderEventListener
class MyServiceApp:
   public Tizen::App::ServiceApp,
   public Tizen::App::IMapDataControlProviderEventListener

实现OnMapDataGetValueRequestReceived()

void
MyServiceApp::OnMapDataControlGetValueRequestReceived(RequestId reqId,
                                                      const Tizen::Base::String& providerId,
                                                      const Tizen::Base::String& dataId,
                                                      const Tizen::Base::String& key),
{
   Registry* pReg = null;
   String retValue;
   ArrayList* pResultValueList = null;
   String errorMsg;
   result r = E_SUCCESS;




   if (providerId.compareTo(L"http://tizen.org/datacontrol/provider/example") == 0)
   {
      if (dataId.compareTo(L"test") == 0)
      {
         String regPath(App::GetInstance()->GetAppRootPath() + L"data/test.ini");
         pReg = new Registry();
         r = pReg->Construct(regPath, false);


         r = pReg->GetValue(dataId, key, retValue);


         pResultValueList = new ArrayList();
         pResultValueList->Add(retValue);
         delete pReg;
      }
      else
      {
         errorMsg.Append(L"The data ID is invalid.");
      }
   }
   else
   {
      errorMsg.Append(L"The provider ID is invalid.");
   }
   r = DataControlProviderManager::GetInstance()->SendMapDataControlResult(reqId, 
                                                                           pResultValueList);


   if (pResultValueList)
   {
      pResultValueList->RemoveAll();
      delete pResultValueList;
   }


   return;
}

使用 Tizen::App::DataControlProviderManager 的 SetMapDataControlProviderListener()设置provider listener
bool
MyServiceApp::OnAppInitializing(Tizen::App::AppRegistry& appRegistry)
{
   result r = E_SUCCESS;
   DataControlProviderManager* pDcMgr = DataControlProviderManager::GetInstance();
   r = pDcMgr->SetMapDataControlProviderEventListener(this);


   return true;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值