Android中的Json读者

时间:2014-08-05 07:10:41

标签: android json

我想(动态地在运行时)存储一些Json数据,如姓名,出生日期,电子邮件和多人的电话号码。为此,使用txt文件并将其保存在SD卡中。 我还想在Listview中显示它们。

为什么创建JsonObject并将其保存到文件的方法是什么。

我实现了一个方法,只检索到我得到一个对象,然后Json阅读器退出while循环。

我的代码段


创建jsonobject并保存


`

        File mFile = new File(Environment.getExternalStorageDirectory(),             "testfile.txt");
        outputStream = new PrintStream (new FileOutputStream (mFile));


        JSONObject friend = new JSONObject ();


        friend.put("Name", "qwe");
        friend.put("Dob", "21-03-91");
        outputStream.print (friend.toString ());

        friend.put("Name", "fgg");
        friend.put("Dob", "02-05-91");
        outputStream.print (friend.toString ());

        friend.put("Name", "jhg");
        friend.put("Dob", "30-01-91");
        outputStream.print (friend.toString ());

`

检索到listview


`

    String friends = null;
    ArrayList<String> friendlist = new ArrayList<String>();
    //Get the text file
    File file = new File(Environment.getExternalStorageDirectory(), "testfile.txt");

    String text=null;
    if(file.exists())   // check if file exist
    {
        //Read text from file
        text = new String();

        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;

            while ((line = br.readLine()) != null) {
                text+=line;
                //text+=',';
            }
            br.close();
        }
        catch (IOException e) {
            //You'll need to add proper error handling here
            e.printStackTrace();
        }

    }

    JsonReader reader = new JsonReader (new StringReader (text));
    try {


        reader.beginObject ();

        while (reader.hasNext ()) {
            reader.nextName();
            friends = reader.nextString().toUpperCase()+" ";
            reader.nextName();
            friends+=reader.nextString();
            friendlist.add(friends);
            friends=null;
        } 
        reader.endObject();
        reader.close();
    }catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }                   
    listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, friendlist); 

    listView.setAdapter(listAdapter);`

1 个答案:

答案 0 :(得分:1)

文件中的结果将是无效的JSON。它看起来像:

{
    "Namea": "qwe",
    "Dob": "21-03-91"
}
{
    "Namea": "wsx",
    "Dob": "21-03-91"
}
{
    "Namea": "qtdfddfwe",
    "Dob": "21-03-91"
}

您必须序列化根JSON元素,而不是单个JSON元素。 尝试:

JSONArray jsonArray = new JSONArray();

friend1.put("Name", "qwe");
friend1.put("Dob", "21-03-91");
jsonArray.put(friend1);
jsonArray.put(friend2);
jsonArray.put(friend3);
outputStream.print (jsonArray.toString ());

使用这种方法,不要忘记将android.permission.WRITE_EXTERNAL_STORAGE添加到androidManifest.xml。

但是我建议使用sqlite数据库来存储数据。