+ Persistencia com Internal Storage - Android

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á…

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

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/

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…

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

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.

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á…

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) {

                }
            }
        });

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.