2015-11-10 2 views
1

Как я могу создать этот JSON с помощью ArrayList для размещения JSON в Androidсоздавать сложные JSON с помощью BasicNameValuePair

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

я получаю только плоский JSON

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

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

Я просто хочу отметить, что 'и BasicNameValuePair пар имя устарели' я recomand узнать что-то новое – Moudiz

+0

Если вы используете ArrayList, то можете ли вы вкратце объяснить свой выходной формат? – Ajay

ответ

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); 
+0

Если этот ответ вам полезен, пожалуйста, примите этот ответ, поскольку вы видели отметку ниже голоса, поэтому все больше людей узнают об этом ответе. –

2

Как вы знаете, HttpClasses, и BasicNameValuePair пары имя устарели в последнем андроиде. мы должны избегать этого сейчас.

и если вы хотите создать

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

Чем вы можете использовать ниже пример кода для создания такого же JSON с помощью класса JSONObject.

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

Каковы альтернативы для HttpClasses, NameValuePair и BasicNameValuePair? у вас есть хороший пример для простого действия post? Спасибо. – user1684140

+0

Используйте HttpURLConnection, это хорошая (лучшая) альтернатива для HttpClasses. – Ajay

+0

@ user1684140: если вы найдете это полезным, не забудьте принять этот ответ. или если вам нужна дополнительная помощь по поводу api call или Json parsing, добавьте/опубликуйте свой комментарий – Ajay

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")); 
0

вот пример для HTTP POST с помощью AsyncTask:

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

надеюсь, что это помогает :)

Смежные вопросы