Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android如何将msg保存到本地存储?_Android_Sqlite_Local Storage - Fatal编程技术网

Android如何将msg保存到本地存储?

Android如何将msg保存到本地存储?,android,sqlite,local-storage,Android,Sqlite,Local Storage,我对Android开发者来说是个新手。我目前正在制作一个简单的消息应用程序。所以我想存储从节点服务器收到的所有文本消息。我真的不知道该怎么做 我从节点服务器收到的消息类似于JSONObject: {"name":"XX", "id":"XX","message":"xxxxxxxx"} 我使用一个自定义的ArrayDepter来显示文本: public class ChatArrayAdapter extends ArrayAdapter<Text> { private Text

我对Android开发者来说是个新手。我目前正在制作一个简单的消息应用程序。所以我想存储从节点服务器收到的所有文本消息。我真的不知道该怎么做

我从节点服务器收到的消息类似于JSONObject:

{"name":"XX", "id":"XX","message":"xxxxxxxx"}
我使用一个自定义的ArrayDepter来显示文本:

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

  }
}
公共类chatarayadapter扩展了ArrayAdapter{
私有文本查看文本,头像;
private List msgcontx=new ArrayList();
专用线路布局包装器;
@凌驾
公共void添加(Textobject){
msgcontx.add(对象);
super.add(object);
}
公共chatarayAdapter(上下文,int textViewResourceId){
super(上下文,textViewResourceId);
}
public int getCount(){
返回此.msgcontx.size();
}
公共文本getItem(int索引){
返回此.msgcontx.get(索引);
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
if(行==null){
LayoutFlater充气器=(LayoutFlater)this.getContext().getSystemService(Context.LAYOUT\u充气器\u服务);
行=充气机。充气(R.layout.chat\u列表视图,父项,false);
}
wrapper=(LinearLayout)row.findViewById(R.id.wrapper);
文本注释=getItem(位置);
avatar=(TextView)row.findViewById(R.id.avatar);
setText(comment.userID);
avatar.setVisibility(comment.left?View.VISIBLE:View.GONE);
text=(TextView)row.findViewById(R.id.comment);
text.setText(comment.comment);
//要更改的聊天背景
text.setBackgroundResource(comment.left?R.dravable.bg_chat_收件人:R.dravable.bg_chat_发件人);
setGravity(comment.left?Gravity.START:Gravity.END);
返回行;
}
公共位图decodeToBitmap(字节[]decodedByte){
返回BitmapFactory.decodeByteArray(DecodeByte,0,DecodeByte.length);
}
}
现在我不知道如何将从节点服务器收到的消息存储在本地存储中,当我打开应用程序时,我还想显示消息历史记录

我应该使用SQL吗?但是我应该如何储存味精呢?把它们放在不同的一排? 我知道这可能是个愚蠢的问题,但我真的不知道如何将msg存储到本地存储并再次读取


谁能简单介绍一下?非常感谢

您应该使用某种类型的数据库。我建议使用带有orm的sql db-它可以让您基于类创建数据库,并且不需要大量sql

我喜欢,但也看看糖

您应该有一个messages表,表中的每一行都将是一条消息。在orm中,您使用类定义消息。示例代码(使用ActiveAndroid orm):


要将消息实际输入数据库,您需要解析json并从中创建消息对象,然后保存它们。要将json解析为消息对象,您可以使用Gson或。

您应该使用某种类型的数据库。我建议使用带有orm的sql db-它允许您基于类创建数据库,并且无需使用大量sql

我喜欢,但也看看糖

您应该有一个messages表,表中的每一行都将是一条消息。在orm中,您使用类定义消息。示例代码(使用ActiveAndroid orm):


要将消息真正输入数据库,您需要解析json并从中创建消息对象,然后保存它们。要将json解析为消息对象,您可以使用Gson或。

您可以使用SQL。您可以直接写入本地文件系统。这是一个取决于你的应用程序需要什么的选择,以及你需要做出的决定。所以如果我直接写信给当地人,它将是公开的,每个人都能看到这封信?因此,如果我使用系统数据库库,android是加密消息还是我必须自己加密?加密必须在您这端完成。但是,如果只有本地用户访问数据,为什么需要在本地存储上对消息进行加密呢?除非您的应用程序需要最大的安全性,否则加密本地存储的消息只会降低I/O操作的速度。您写入应用程序私有目录的任何数据都是私有的,但当然,具有root访问权限的用户可以非常轻松地打开这些文件。@KennyWorden是的……这就是我所想的。这是一个非常容易的根安卓手机和许多ppl r这样做。。。但是你是对的,加密会减慢速度…所以我还在考虑。你可以使用SQL。您可以直接写入本地文件系统。这是一个取决于你的应用程序需要什么的选择,以及你需要做出的决定。所以如果我直接写信给当地人,它将是公开的,每个人都能看到这封信?因此,如果我使用系统数据库库,android是加密消息还是我必须自己加密?加密必须在您这端完成。但是,如果只有本地用户访问数据,为什么需要在本地存储上对消息进行加密呢?除非您的应用程序需要最大的安全性,否则加密本地存储的消息只会降低I/O操作的速度。您写入应用程序私有目录的任何数据都是私有的,但当然,具有root访问权限的用户可以非常轻松地打开这些文件。@KennyWorden是的……这就是我所想的。这是一个非常容易的根安卓手机和许多ppl r这样做。。。但是你是对的,加密会减慢速度…所以我还在考虑。你可以使用SQL。您可以直接写入本地文件系统。这是一个取决于你的应用程序需要什么的选择,以及你需要做出的决定。所以如果我直接写信给当地人,它将是公开的,每个人都能看到这封信?因此,如果我使用系统数据库库,android是加密消息还是我必须自己加密?加密必须在您这端完成。但是为什么需要在本地存储上对消息进行加密,
@Table(name="Messages")
class Message extends Model {
    String name;
    String id;
    String message;

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

}