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()来处理请求。
call Select()
实现Tizen::App::ISqlDataControlResponseListener 接口
实现OnSqlDataControlInsertResponseReceived()
为Data Control设置回应监听者
2) SqlDataControl (Providing a SqlDataControl)
在manifest中设置导出Data Control
实现Tizen::App::ISqlDataControlProviderEventListener 接口
实现 OnSqlDataControlSelectRequestReceived()
实现OnSqlDataControlInsertRequestReceived()
使用Tizen::App::DataControlProviderManager 的SetSqlDataControlProviderListener()设置提供Data Control的listener
3)MapDataControl(Using a MapDataControl)
获取Tizen::App::MapDataControl 实例
调用GetValue()
实现Tizen::App::IMapDataControlResponseListener
实现OnMapDataGetValueResponseReceived()
设置实例的回应监听
4)MapDataControl (Providing a MapDataControl)
在manifest中设置导出Data Control
实现Tizen::App::IMapDataControlProviderEventListener
实现OnMapDataGetValueRequestReceived()
使用 Tizen::App::DataControlProviderManager 的 SetMapDataControlProviderListener()设置provider listener
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;
}