1

如何使用 ArrayList 创建此 JSON 以在 Android 中发布 json

{
"user" : 
    {
        "nickname" : "nickname6",
        "password" : "1234",
    }
}

我只得到一个平面 JSON

    ArrayList<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>();

    nameValuePairs.add(new BasicNameValuePair("nickname","nickname6"));
    nameValuePairs.add(new BasicNameValuePair("password", "1234"));
4

4 回答 4

2

如您所知,HttpClasses、NameValuePair 和 BasicNameValuePair 在最新的 android 中已被弃用。我们现在应该避免它。

如果你想创建

{
   "user":{
        "nickname":"nickname6"
        "password":"1234",             
    }
}

您可以使用下面的代码示例使用 JSONObject 类创建相同的 json。

JSONObject jObj = new JSONObject();

try {       
    JSONObject userCredentials = new JSONObject();
    userCredentials.put("nickname","nickname6");
    userCredentials.put("password","1234");

    jObj.put("user", userCredentials);
} catch(Exception e) {
   e.printStackTrace();
}
于 2015-11-10T06:22:49.477 回答
2

您需要创建一个 JSON,为此您必须将该 JSON 作为参数添加到您的 POST 方法中。为此,您可以尝试以下操作:

JSONObject json = new JSONObject(jsonString);
JSONObject joParams = json.getJSONObject("params");
String nickname = joParams.getString("nickname");

    post.add(new BasicNameValuePair("nickname", nickname);
于 2015-11-10T05:57:35.730 回答
0

尝试像这样使用 ContentValues

ContentValues values=new ContentValues();
values.put("username",name);
values.put("password",password);

或使用 MultipartEntity

MultipartEntity multi = new MultipartEntity();
multi.addPart("name", new StringBody("your data"));
multi.addPart("Id", new StringBody("123"));
于 2015-11-16T06:47:53.063 回答
0

这是一个使用 AsyncTask 的 http post 示例:

public class httpSendrequest extends AsyncTask<Void,Void,String> {

        ArrayList<NameValuePair> nvPairs=new ArrayList<>();

    Boolean error=false;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            //here you initialize your json object and add it to value pairs
            JSONObject jObj = new JSONObject();

    try {       
            JSONObject userCredentials = new JSONObject();
            userCredentials.put("nickname","nickname6");
            userCredentials.put("password","1234");

            jObj.put("user", userCredentials);
    nvPairs.add(new BasicNameValuePair("jsonstring",jObj.toString()));
    } catch(Exception e) {
      error=true;
    }

        }

        @Override
        protected String doInBackground(Void... params) {

    if(!error)
            try{

                String link ="http://"+ip+"/QSystem.asmx/insert_answer" ;
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(link); //adding URL to the http post
                httppost.setEntity(new UrlEncodedFormEntity(nvPairs, HTTP.UTF_8)); //adding the value pairs and encoding to the http post request
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity resEntity = response.getEntity();


            } catch (Exception e){
                error=true;
            }

            return "str";
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);

            if(!error) {
                Toast.makeText(getApplicationContext(), "Sent", Toast.LENGTH_SHORT).show();

            }
        }

    }

然后您可以从 onCreate 或在 OnClickListener 中为按钮调用它,如下所示:

new httpSendrequest().execute();

希望这可以帮助 :)

于 2015-11-16T07:07:10.137 回答