如何在Android中写入json文件

时间:2014-04-07 06:59:06

标签: android json file-io

我在我的应用程序中使用捆绑的json文件。我想读取和写入json文件中的数据。我有一个listview,它显示json中当前可用的数据和用户输入数据的edittext。该数据必须写入json。怎么做?

这是我的代码......

  public class MainActivity extends Activity 
    {
        String myjsonstring;

         ArrayList<Data> web = new ArrayList<Data>();

         @Override
        protected void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            JsonParser();

            }



        private void JsonParser() 
        {
            // Reading text file from assets folder
            StringBuffer sb = new StringBuffer();
            BufferedReader br = null;
            try {
                br = new BufferedReader(new InputStreamReader(getAssets().open(
                        "single.json")));
                String temp;
                while ((temp = br.readLine()) != null)
                    sb.append(temp);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    br.close(); // stop reading
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            myjsonstring = sb.toString();

            // Try to parse JSON
            try {


                JSONObject jsonObjMain = new JSONObject(myjsonstring);
                JSONArray jsonArray = jsonObjMain.getJSONArray("message");

                for (int i=0; i<jsonArray.length(); i++) {

                    JSONObject jsonObj = jsonArray.getJSONObject(i);

                    // Getting data from individual JSONObject

                    Data data = new Data(jsonObj.getString("name") , jsonObj.getString("msg"));

                    web.add(data);
                }

                final customtest1 adapter = new customtest1(MainActivity.this,R.layout.list_single,web); 
                final ListView list = (ListView)findViewById(R.id.list);
                list.setAdapter(adapter);

                list.setOnItemClickListener(new AdapterView.OnItemClickListener() 
                {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {
                         Toast.makeText(MainActivity.this, "TEST.........", Toast.LENGTH_SHORT).show();
                         adapter.notifyDataSetChanged();
                    }

                });
              //Send activity......

                final EditText et = (EditText)findViewById(R.id.EditText1);
                final Button imb=(Button)findViewById(R.id.btn_send);
                imb.setOnClickListener(new OnClickListener()
                {
                 @Override
                 public void onClick(View arg0) 
                 { 
                      String str = et.getText().toString();

                      Data store = new Data(et.getText().toString());
                      web.add(store);

                       Toast.makeText(MainActivity.this, "You entered...."+store, Toast.LENGTH_SHORT).show();
                      et.setText(" ");
                      scrollMyListViewToBottom();
                      adapter.notifyDataSetChanged();

                        }
                //Screen auto scrollup....
                 private void scrollMyListViewToBottom() {
                        list.post(new Runnable() {
                            @Override
                            public void run() {
                                // Select the last row so it will scroll into view...
                                list.setSelection(adapter.getCount() - 1);
                            }
                        });
                }});

            }
            catch (JSONException e) 
            {
                e.printStackTrace();
            }
           }
    }

2 个答案:

答案 0 :(得分:0)

在我看来,你可以从存在的文件中解析jsonarray,然后将新数据添加到旧的jasonarray,然后将新数据写入现有文件。

答案 1 :(得分:0)

你无法在运行时将资源文件夹中的文件.load文件编辑到内存中,然后尝试使用此方法写入内存:

private void writeToFile(String jsonData) {
try {
    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("single.json", Context.MODE_PRIVATE));
    outputStreamWriter.write(jsonData);
    outputStreamWriter.close();
}
catch (IOException e) {
    Log.e("Exception", "File write failed: " + e.toString());
} 
}