2017-02-20 7 views
1

У меня есть свой класс GlobalClass extends. Я хочу привязать данные глобальных объектов к счетчику. Вот мой GlobalClassкак адаптировать данные от глобального объекта к счетчику

public class GlobalClass extends Application { 

private List<ProjectType> projectTypes; 

public List<ProjectType> getProjectTypes() { 
    return projectTypes; 
} 

public void setProjectTypes(List<ProjectType> projectTypes) { 
    this.projectTypes = projectTypes; 
} 
} 

Pojo класс

public class ProjectType implements Serializable { 
private Integer projectTypeId; 
private String typeName; 
private Integer peckOrder; 

//getter and setter here 

И я получаю ответ от сервера, используя залп и анализировать с помощью GSON и установить ответ на GlobalClass сюда код

JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, getString(R.string.TEST_projectTypeURL), null, new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 
      final GlobalClass globalVariable = (GlobalClass) getApplicationContext(); 
      Gson gson = new Gson(); 
      List<ProjectType> projectTypes = gson.fromJson(String.valueOf(response),List.class); 
      globalVariable.setProjectTypes(projectTypes); 
     } 
    } 

И, наконец, в другом классе активности IAM, используя вертушку, чтобы связать данные из объекта GlobalClass

globalVariable = (GlobalClass) getApplicationContext(); 
    List<String> projectTypeList = new ArrayList<>(); 

    ArrayList<ProjectType> projectTypesCollection = new ArrayList<ProjectType>(globalVariable.getProjectTypes()); 

    for (ProjectType projectType: projectTypesCollection) { 

     projectTypeList.add(projectType.getTypeName()); 
    } 

    prjtTypeSpinner = (Spinner)findViewById(R.id.spn_prjt_type); 
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item,projectTypeList); 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    prjtTypeSpinner.setAdapter(dataAdapter); 

При попытке выше код я получаю сообщение об ошибке «com.google.gson.internal.LinkedTreeMap не может быть приведен к класс pojo.ProjectType»

здесь возвращаемое значение объекта,

[{projectTypeId=3.0, typeName=ALS, peckOrder=220.0}, {projectTypeId=2.0, typeName=ALB, peckOrder=210.0}, {projectTypeId=1.0, typeName=CL, peckOrder=200.0}, {projectTypeId=7.0, typeName=ACG, peckOrder=40.0}, {projectTypeId=6.0, typeName=ACS, peckOrder=30.0}, {projectTypeId=5.0, typeName=ACB, peckOrder=20.0}, {projectTypeId=4.0, typeName=CC, peckOrder=10.0}] 

Я хочу typeName в spinner. Заранее спасибо.

ответ

1

я, наконец, решить эту проблему,

Arrays.asList(gson.fromJson(response, ProjectType[].class)) 

когда я пытаюсь код моя ошибка решена, этот код хорошо работает

0

Я думаю, что у вас есть проблемы с этим кодами

List<ProjectType> projectTypes = gson.fromJson(String.valueOf(response),List.class); 

вам нужно изменить на:

List<ProjectType> projectTypes = gson.fromJson(new Gson().toJson(response),new TypeToken<List<ProjectType>>() { 
      }.getType()); 
+0

при использовании вашего кода я получаю сообщение с браком "java.lang.IllegalStateException: ожидается BEGIN_ARRAY, но был BEGIN_OBJECT" – Narendhran

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