×
Namespaces

Variants
Actions
Revision as of 04:05, 31 May 2013 by hamishwillee (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Archived:Persistência em PySymbian

From Nokia Developer Wiki
Jump to: navigation, search

Archived.pngAquivado: Este artigo foi arquivado, pois o conteúdo não é mais considerado relevante para se criar soluções comerciais atuais. Se você achar que este artigo ainda é importante, inclua o template {{ForArchiveReview|escreva a sua justificativa}}.

Acredita-se que este artigo ainda seja válido no contexto original (quando ele foi escrito)


Article Metadata

Artigo
Tradução:
Por _katy_
Última alteração feita por hamishwillee em 31 May 2013

A classe abaixo está encapsula um arquivo e32dbm em PySymbian, podendo ser usada como persistência.

import e32dbm
 
class PersistentStorage:
def __init__(self,filename):
try:
# Tenta abrir um arquivo existente
self.data = e32dbm.open(filename,"wf")
except:
# Falhou: Assume que o arquivo precisa ser criado
self.data = e32dbm.open(filename,"nf")
 
def SetValue(self,key,value):
if str(value) == value:
# Se o valor for uma String precisará de um tratamento especial
self.config[key] = "u\"%s\"" % value
else:
# Caso contrário simplesmente converte o valor para uma String
self.config[key] = str(value)
 
def GetValue(self,key):
try:
return eval(self.config[key])
except:
# Assume que o item ainda não existe, assim retorna o valor "None"
return None
 
def Close(self):
self.data.close()

Como usar o código

O código abaixo mostra como usar essa classe para persistência.

import appuifw
import persistentstorage
 
def Main():
 
# Cria um local para armazenamento
storage = PersistentStorage("e:\\config")
 
# Recupera a posição
position = storage.GetValue("position")
 
# Define um valor padrão caso não exita
if position == None:
position = (51.47,5.48)
 
# Solicita novos valores, mostrando o valor atual como padrão
latitude = appuifw.query(u"Latitude:","float",position[0])
longitude = appuifw.query(u"Longitude:","float",position[1])
 
# Se um novo valor for fornecido, este é gravado
if latitude != None and longitude != None:
storage.SetValue("position",(latitude,longitude))
 
storage.Close()
 
Main()

Oposições

O método PersistentStorage.SetValue() empacota uma string entre aspas para ter uma avaliação posterior com eval() apropriada. Entretanto, isso não funciona corretamente se você usar barras invertidas numa string. Basicamente você tem que duplicar cada barra invertida para ter uma resposta da função eval() correta. Para complementar, o código para fazer isso automaticamente será um exercício para o leitor.

This page was last modified on 31 May 2013, at 04:05.
173 page views in the last 30 days.