2015-09-19 3 views
0

Я использую Volley и нуждаюсь в пересылке в список серверов User и List<Integer>.Volley: сделать запрос со списком <T> в JSONObject

User класс:

public class User { 

     public int id; 
     public String name; 

     public MyClass(int id, String name){ 
      this.id = id; 
      this.name= name; 
     } 
} 

Я использую код

HashMap<String, Object> params = new HashMap<>(); 

    List<Integer> categories = new ArrayList<>(Arrays.asList(5, 8, 9)); 
    List<User> users = new ArrayList<>(Arrays.asList(
      new User(1, "User1"), 
      new User(2, "User2"), 
      new User(3, "User3") 
    )); 


    params.put("categories", categories); 
    params.put("users", users); 

    JSONObject jsonBody = new JSONObject(params); 

Проблема заключается в JSONObject не может разобрать User

{ 
    "users": [ 
     null, 
     null, 
     null 
    ], 
    "categories": [ 
     5, 
     8, 
     9 
    ] 
} 

Как разобрать его с JSONObject?

Параметр «users» должен быть array не string.

мне нужно JSONObject потому Volley использовать его

JsonObjectRequest(int method, String url, JSONObject jsonRequest, 
      Listener<JSONObject> listener, ErrorListener errorListener) 

enter image description here

Полный код:

package com.example.admin.testjson; 

import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 

import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 


public class MainActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Map<String, Object> params = new HashMap<>(); 

     List<Integer> categories = new ArrayList<>(Arrays.asList(5, 8, 9)); 
     List<User> users = new ArrayList<>(Arrays.asList(
       new User(1, "User1"), 
       new User(2, "User2"), 
       new User(3, "User3") 
     )); 


     params.put("categories", categories); 
     params.put("users", users); 

     JSONObject jsonBody = new JSONObject(params); 


    } 
} 


package com.example.admin.testjson; 


    public class User { 
     int id; 
     String name; 

     public User(int id, String name){ 
      this.id = id; 
      this.name = name; 
     } 
    } 
+0

Каких рамки JSON вы используете? – Henry

+0

В проекте я использую Джексона, использование волейбола org.json – Alexandr

ответ

1

Я думаю, вы должны заменить MyClass на User в пользователя класс, как это

public class User { 

    public int id; 
    public String name; 

    public User(int id, String name){ 
     this.id = id; 
     this.name= name; 
    } 
} 

Я проверил здание JSONObject с кодом, то пользователи не нулевой!

enter image description here

UPDATE:

Попробуйте использовать мой следующий код для вашего нового пустого проекта (мой проект работает нормально, пользователи не равно нуль):

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    HashMap<String, Object> params = new HashMap<>(); 

    List<Integer> categories = new ArrayList<>(Arrays.asList(5, 8, 9)); 
    List<User> users = new ArrayList<>(Arrays.asList(
      new User(1, "User1"), 
      new User(2, "User2"), 
      new User(3, "User3") 
    )); 


    params.put("categories", categories); 
    params.put("users", users); 

    JSONObject jsonBody = new JSONObject(params); 
    Log.i("BNK", jsonBody.toString()); 
} 

public class User { 

    public int id; 
    public String name; 

    public User(int id, String name){ 
     this.id = id; 
     this.name= name; 
    } 
} 
} 
+0

Спасибо, что попробовали запустить код. MyClass - это просто опечатка в моем примере, используйте правый конструктор. А на скриншоте «пользователи» String - это json, а не массив. Странно, я попробовал запустить код и дать null, см. Мое обновление. – Alexandr

+0

Где вы определили свой пользовательский класс? Попробуйте создать новый файл 'User.java' и определите этот класс. Затем запустите приложение – BNK

+0

. Кроме того, попробуйте удалить Джексон временно, просто используйте по умолчанию JSON – BNK

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