我在我的应用程序中使用捆绑的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();
}
}
}
答案 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());
}
}