+ Persistencia com Internal Storage - Android

8 respostas
J

Tenho uma ListView com 3 itens ‘Nome Aluno’, ‘Idade’, ‘Sexo’, que consome uma WebService…
Como faço para persistir esses dados via Internal Storage, quando o usuario estiver OffLine…

OBS: A ListView so pega os dados se tiver conexao com a net, eu quero que esses dados continuam quando o usuario estiver OffLine usando o Internal Storage.


Opa Voltando ao assunto!!!

Eu fiz um exemplo basico aqui que salva no InternalStorage o que eu coloco no EditText, Ta salvando e recuperando de boas…

**

//SALVA O OBJ

btn_save.setOnClickListener(new View.OnClickListener() {

public void onClick(View arg0) {

data = edit_text.getText().toString();

try {

FileOutputStream fOut = openFileOutput(file,MODE_WORLD_READABLE);

fOut.write(data.getBytes());

fOut.close();

Toast.makeText(getBaseContext(),“ARQUIVO SALVO”,

Toast.LENGTH_SHORT).show();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});
//LER O OBJ

btn_read.setOnClickListener(new View.OnClickListener() {

public void onClick(View arg0) {

try{

FileInputStream fin = openFileInput(file);

int c;

String temp="";

while( (c = fin.read()) != -1){

temp = temp + Character.toString((char)c);

}

text_view1.setText(temp);

Toast.makeText(getBaseContext(),ARQUIVO LIDO,

Toast.LENGTH_SHORT).show();
}catch(Exception e){
}

}

});
**

Ae vai minha ideia… me corrijam se eu estiver errado, eu passo os
valores dos dados da WebService para variaveis correspondente e salvo no
InternalStorage, ae depois de salvo eu seto para a Listiew?

Se eu estiver certo alguem pode me dizer como adaptar esse codigo para salvar varios OBJ e depois listar na ListView…

Agradeço desde já…

8 Respostas

L

Você precisa salvar os dados no banco de dados local da aplicação (direto no device)

Você pode ler mais sobre na documentação do Android: SQLite Android

Existem bibliotecas que auxiliam nessa função, como por exemplo o cupBoard

S

Vc pode usar o SQLite do Android, mas como tem muito boilerplate, usa uma lib. Melhor até agora que usei foi o Sugar ORM. http://satyan.github.io/sugar/

J

Eu tava vendo que dava para fazer com o SqLite mas como vai guardar além de muitos Dados também vai guardar .PNG. O SqLite não iria aguentar a sobrecarga de dados e ia começar a travar…

Eu queria um tutorial ou algo melhor de Internal Storage usando ListView…

S

Guarde a imagem no sdcard e o caminho da imagem no sqlite como texto, e chame na hora que for usar.

J

Todas as ideias aqui estão certas…
Mas o melhor seria guardar tudo no Internal Storage(Memoria do telefone) como Json, porque está pegando os dados de uma WebService que retorna Json.

O meu problema aqui está em exatamente em guardar esse dados Json no InternalStorage e depois Listar os mesmo na ListView.
Nada mas obg.
O PNG eu ja até retirei pq vai comsumir muita internet e muita memoria do usuario.

J

Opa Voltando ao assunto!!!

Eu fiz um exemplo basico aqui que salva no InternalStorage o que eu coloco no EditText, Ta salvando e recuperando de boas…

**

//SALVA O OBJ

btn_save.setOnClickListener(new View.OnClickListener() {

public void onClick(View arg0) {

data = edit_text.getText().toString();

try {

FileOutputStream fOut = openFileOutput(file,MODE_WORLD_READABLE);

fOut.write(data.getBytes());

fOut.close();

Toast.makeText(getBaseContext(),“ARQUIVO SALVO”,

Toast.LENGTH_SHORT).show();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});
//LER O OBJ

btn_read.setOnClickListener(new View.OnClickListener() {

public void onClick(View arg0) {

try{

FileInputStream fin = openFileInput(file);

int c;

String temp="";

while( (c = fin.read()) != -1){

temp = temp + Character.toString((char)c);

}

text_view1.setText(temp);

Toast.makeText(getBaseContext(),ARQUIVO LIDO,

Toast.LENGTH_SHORT).show();
}catch(Exception e){
    }
}

});
**

Ae vai minha ideia… me corrijam se eu estiver errado, eu passo os valores dos dados da WebService para variaveis correspondente e salvo no InternalStorage, ae depois de salvo eu seto para a Listiew?

Se eu estiver certo alguem pode me dizer como adaptar esse codigo para salvar varios OBJ e depois listar na ListView…

Agradeço desde já…

S

Cara, se vc quer salvar os dados do Json, vc recebe o Json do WS, cria o(s) objeto(s) que vc ta trabalhando com esse json, e grava esse objeto com as opções de SQLite que te demos… o SQLite já grava no internal storage… Se o Android já tem um sistema de BD nele mesmo, não entendi pq vc quer guardar como outro tipo de arquivo.

Me corrija se o que vc quer fazer não é isso.

Eu consigo usar ali “trabalho.save” pq to usando o SugarORM pra DB, é simples assim.

Um exemplo de um app que brinquei um tempo atras.

OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url("seuEnderecoDeRequisicao")
                .build();

client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d("Erro JSON", "onFailure: " + e.toString());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
                try {
                    String responseData = response.body().string();
                    JSONObject json = new JSONObject(responseData);
                    JSONArray jArray = json.getJSONArray("trabalhos");
                    for (int i = 0; i < jArray.length(); i++) {
                            JSONObject obj = jArray.getJSONObject(i);
                            DateTimeFormatter parser2 = ISODateTimeFormat.dateTimeNoMillis();
                            DateTime dt = new DateTime(obj.getString("data"));
                            String tipo = obj.getString("tipo");
                            String materia = obj.getString("materia");
                            String dataTrabalho = dt.getDayOfMonth()+"/"+dt.getMonthOfYear()+"/"+dt.getYear();
                            String professor = obj.getString("professor");
                            String resumo = obj.getString("resumo");
                            Trabalhos trabalhos = new Trabalhos(tipo, dataTrabalho, professor, materia, resumo);
                            trabalhos.save();
                        }
              } catch (JSONException e) {

                }
            }
        });
F

Espero ajudar tenho no meu github exemplos de como pegar um json do ws usando o retrofit2 https://github.com/coutinhonobre/UsingRetrofi2.git e um outro de usando Sqllite https://github.com/coutinhonobre/ForcaVendas.git.

Criado 29 de setembro de 2016
Ultima resposta 4 de out. de 2016
Respostas 8
Participantes 4