如何在 android 中单击按钮时向 JSONObject 添加值?
How to add values to JSONObject on button click in android?
我有一个适配器,我正在从中创建编辑文本供用户动态输入数据。
现在,我必须以键值对的形式将其存储在 JSONObject 中吗?
我该怎么做?
我将所有创建的编辑文本存储在一个列表中
ArrayList<EditText> list = new ArrayList<>();
编辑部分
我正在将编辑文本添加到列表中,如下所示:
list.add(holder.editText);
编辑部分 - 结束
这是我的按钮点击监听器代码:
addnewAcnt.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Toast.makeText(context, "INIT", Toast.LENGTH_SHORT).show();
JSONObject jsonObject2 = null;
for (int i = 0; i < count; i++)
{
jsonObject2 = new JSONObject();
try
{
jsonObject2.put(String.valueOf(list.get(i).getHint()), String.valueOf(list.get(i).getText()));
}
catch (Exception e)
{
e.printStackTrace();
Log.e("JsonToSendError: ", String.valueOf(e));
}
Log.e("JsonToSend: ", String.valueOf(jsonObject2));
}
}
});
我正在日志中获取数据:
2020-10-05 15:19:21.476 16462-16462/com.packagename E/JsonToSend:: {"Title":"Whosebug"}
2020-10-05 15:19:21.476 16462-16462/com.packagename E/JsonToSend:: {"URL":"www.whosebug.com"}
2020-10-05 15:19:21.476 16462-16462/com.packagename E/JsonToSend:: {"Username":"test"}
2020-10-05 15:19:21.476 16462-16462/com.packagename E/JsonToSend:: {"Password":"testtesttest"}
但是,我需要它在单个对象中,例如:
{"Title":"Whosebug", "URL":"www.whosebug.com", "Username":"test", "Password":"testtesttest"}
任何帮助都会有用。
请
我认为您需要在回调 onclick 之外定义 jsonObject2 = new JSONObject();
。希望对您有所帮助。
您在 for 循环之前创建了 JSON 对象
并在 for 循环中初始化。这是错误的
在 FOR 循环之前初始化一个 JSON 对象
将此行 jsonObject2 = null; 更改为 jsonObject2 = new JSONObject();
并从 FOR 循环中移除
addnewAcnt.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Toast.makeText(context, "INIT", Toast.LENGTH_SHORT).show();
jsonObject2 = new JSONObject();
for (int i = 0; i < count; i++)
{
//jsonObject2 = new JSONObject();
try
{
jsonObject2.put(String.valueOf(list.get(i).getHint()), String.valueOf(list.get(i).getText()));
}
catch (Exception e)
{
e.printStackTrace();
Log.e("JsonToSendError: ", String.valueOf(e));
}
Log.e("JsonToSend: ", String.valueOf(jsonObject2));
}
}
});
因为您在循环中创建新对象,请尝试在循环之前移动您的 jsonObject2 = new JSONObject();
。
关于最后一个对象,我不确定如何更改变量 count
的值。但是,如果您从列表中获取价值,则应在循环中使用该列表计数。
代码应该是这样的
addnewAcnt.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Toast.makeText(context, "INIT", Toast.LENGTH_SHORT).show();
JSONObject jsonObject2 = new JSONObject();
for (int i = 0; i < list.size(); i++) // variable count to be your list (edit text) size.
{
try
{
jsonObject2.put(String.valueOf(list.get(i).getHint()), list.get(i).getText().toString().trim());
}
catch (Exception e)
{
e.printStackTrace();
Log.e("JsonToSendError: ", String.valueOf(e));
}
Log.e("JsonToSend: ", String.valueOf(jsonObject2));
}
}
});
我有一个适配器,我正在从中创建编辑文本供用户动态输入数据。
现在,我必须以键值对的形式将其存储在 JSONObject 中吗? 我该怎么做?
我将所有创建的编辑文本存储在一个列表中
ArrayList<EditText> list = new ArrayList<>();
编辑部分
我正在将编辑文本添加到列表中,如下所示:
list.add(holder.editText);
编辑部分 - 结束
这是我的按钮点击监听器代码:
addnewAcnt.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Toast.makeText(context, "INIT", Toast.LENGTH_SHORT).show();
JSONObject jsonObject2 = null;
for (int i = 0; i < count; i++)
{
jsonObject2 = new JSONObject();
try
{
jsonObject2.put(String.valueOf(list.get(i).getHint()), String.valueOf(list.get(i).getText()));
}
catch (Exception e)
{
e.printStackTrace();
Log.e("JsonToSendError: ", String.valueOf(e));
}
Log.e("JsonToSend: ", String.valueOf(jsonObject2));
}
}
});
我正在日志中获取数据:
2020-10-05 15:19:21.476 16462-16462/com.packagename E/JsonToSend:: {"Title":"Whosebug"}
2020-10-05 15:19:21.476 16462-16462/com.packagename E/JsonToSend:: {"URL":"www.whosebug.com"}
2020-10-05 15:19:21.476 16462-16462/com.packagename E/JsonToSend:: {"Username":"test"}
2020-10-05 15:19:21.476 16462-16462/com.packagename E/JsonToSend:: {"Password":"testtesttest"}
但是,我需要它在单个对象中,例如:
{"Title":"Whosebug", "URL":"www.whosebug.com", "Username":"test", "Password":"testtesttest"}
任何帮助都会有用。 请
我认为您需要在回调 onclick 之外定义 jsonObject2 = new JSONObject();
。希望对您有所帮助。
您在 for 循环之前创建了 JSON 对象 并在 for 循环中初始化。这是错误的
在 FOR 循环之前初始化一个 JSON 对象
将此行 jsonObject2 = null; 更改为 jsonObject2 = new JSONObject(); 并从 FOR 循环中移除
addnewAcnt.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Toast.makeText(context, "INIT", Toast.LENGTH_SHORT).show();
jsonObject2 = new JSONObject();
for (int i = 0; i < count; i++)
{
//jsonObject2 = new JSONObject();
try
{
jsonObject2.put(String.valueOf(list.get(i).getHint()), String.valueOf(list.get(i).getText()));
}
catch (Exception e)
{
e.printStackTrace();
Log.e("JsonToSendError: ", String.valueOf(e));
}
Log.e("JsonToSend: ", String.valueOf(jsonObject2));
}
}
});
因为您在循环中创建新对象,请尝试在循环之前移动您的 jsonObject2 = new JSONObject();
。
关于最后一个对象,我不确定如何更改变量 count
的值。但是,如果您从列表中获取价值,则应在循环中使用该列表计数。
代码应该是这样的
addnewAcnt.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Toast.makeText(context, "INIT", Toast.LENGTH_SHORT).show();
JSONObject jsonObject2 = new JSONObject();
for (int i = 0; i < list.size(); i++) // variable count to be your list (edit text) size.
{
try
{
jsonObject2.put(String.valueOf(list.get(i).getHint()), list.get(i).getText().toString().trim());
}
catch (Exception e)
{
e.printStackTrace();
Log.e("JsonToSendError: ", String.valueOf(e));
}
Log.e("JsonToSend: ", String.valueOf(jsonObject2));
}
}
});