2015-06-11 4 views
1

Я довольно новичок в Android-разработчике. В настоящее время я делаю простое приложение для сообщений. поэтому я хочу сохранить все текстовое сообщение, полученное с сервера узла. Я действительно не сейчас, как мне это сделать.Android Как сохранить msg в локальное хранилище?

ГЗСА я получил от сервера узла является JSONObject как:

{"name":"XX", "id":"XX","message":"xxxxxxxx"} 

и я использую пользовательский ArrayAdepter для отображения текста:

public class ChatArrayAdapter extends ArrayAdapter<Text> { 

private TextView text,avatar; 
private List<Text> msgcontx = new ArrayList<Text>(); 
private LinearLayout wrapper; 

@Override 
public void add(Textobject){ 
    msgcontx.add(object); 
    super.add(object); 
} 

public ChatArrayAdapter(Context context,int textViewResourceId) { 
    super(context, textViewResourceId); 
} 

public int getCount(){ 
    return this.msgcontx.size(); 
} 

public Text getItem(int index){ 
    return this.msgcontx.get(index); 
} 

public View getView(int position,View convertView,ViewGroup parent){ 
    View row = convertView; 
    if(row == null){ 
     LayoutInflater inflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(R.layout.chat_listview, parent,false); 
    } 
    wrapper = (LinearLayout)row.findViewById(R.id.wrapper); 
    Text comment = getItem(position); 

    avatar = (TextView)row.findViewById(R.id.avatar); 
    avatar.setText(comment.userID); 
    avatar.setVisibility(comment.left? View.VISIBLE: View.GONE); 

    text = (TextView)row.findViewById(R.id.comment); 
    text.setText(comment.comment); 
    // chat background to be changed 
    text.setBackgroundResource(comment.left ? R.drawable.bg_chat_recipient : R.drawable.bg_chat_sender); 
    wrapper.setGravity(comment.left? Gravity.START : Gravity.END); 

    return row; 
} 

    public Bitmap decodeToBitmap(byte[] decodedByte){ 
    return BitmapFactory.decodeByteArray(decodedByte, 0,decodedByte.length); 

    } 
} 

теперь я не знаю, как должен Я сохраняю те сообщения, которые я получил с сервера узла в локальном хранилище, и когда я открываю приложение, я хочу также отобразить историю сообщений.

Должен ли я использовать SQL? но как мне сохранить msg? поместить их в разные строки? Я знаю, что это может быть глупый вопрос, но я действительно не знаю, как сохранить msg в локальном хранилище и прочитать их снова.

Любой может дать краткое введение? Большое спасибо!

+0

Вы можете использовать SQL. Вы можете написать прямо в локальную файловую систему. Это выбор, который зависит от того, что нужно вашему приложению, и решение **, которое вы должны сделать. –

+0

, так что, если я напишу прямо на локальном, это будет публично, и все смогут увидеть, что пишут? Итак, если я использую библиотеку системной базы данных, андроид шифрует сообщение, или я должен сам его зашифровать? – Solorchid

+0

Шифрование должно выполняться на вашем конце. Но зачем нужны сообщения, которые нужно зашифровать на локальном хранилище, если только один доступ к данным является локальным пользователем? Если вам не нужна максимальная безопасность в вашем приложении, шифрование локально сохраненных сообщений будет просто замедлять операции ввода-вывода. И любые данные, которые вы пишете в частном каталоге приложения, являются * private *, но, конечно, люди с правами доступа root могут легко открывать эти файлы. –

ответ

0

Вы должны использовать какую-то базу данных. Я рекомендую sql db с помощью orm - он позволяет создавать базу данных на основе классов и устраняет необходимость в тоннах sql.

Мне нравится active android, но также взгляните на сахарный орм.

У вас должна быть таблица сообщений, и каждая строка в таблице будет сообщением. В orm вы определяете сообщение с использованием класса. Пример кода (с помощью ActiveAndroid ОРМ):

@Table(name="Messages") 
class Message extends Model { 
    String name; 
    String id; 
    String message; 

    //the empty consructor is required by active android 
    public Message(){ 
     super(); 
    } 

} 

фактически ввести сообщения в ваш Databse вам нужно будет разобрать JSON и создавать сообщения объекты из них, а затем сохранить them.To разобрать JSON в объект Message вы может использовать Gson или logan square.

+0

Спасибо большое !!!! Я собираюсь проверить эти библиотеки !!! говоря о базе данных, имеет значение, какую базу данных использовать? потому что я думаю, что Android имеет библиотеку базы данных sqlite. А также, нужно ли мне беспокоиться о местоположении о сохраненных данных, автоматически ли система выбирает местоположение? это видно для общественности? – Solorchid

+0

хранит базу данных в самой папке приложения, и да, она будет общедоступной, она создаст файл .db, который будет виден для пользователя. вы делаете его невидимым, сохраняя его в папке с ресурсами вместо sdcard. – SAM

+0

@Shravankumar об этом, некоторое приложение создало бы локальную папку внутри SD-карты, некоторые будут хранить внутри data/com.app. ***/folder. Знаете ли вы, какие отличия? благодаря! – Solorchid