【问题标题】:How to write into a json file in Android如何在Android中写入json文件
【发布时间】:2014-04-07 06:59:06
【问题描述】:

我在我的应用程序中使用捆绑的 json 文件。我想在 json 文件中读取和写入数据。我有一个列表视图,它显示 json 中当前可用的数据和一个用户输入数据的编辑文本。该数据必须写入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();
            }
           }
    }

【问题讨论】:

  • 您不能编辑作为资源添加的文件,在您的应用程序数据文件夹中复制一份

标签: android json file-io


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你不能在运行时编辑asset文件夹中的文件。将文件加载到内存中,然后尝试这种方法写入内存:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2020-12-19
    • 2020-09-02
    • 2011-12-13
    相关资源
    最近更新 更多