如何在 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));
                }
            }
        });