[英]Convert/parse data in json format to java in Android
我的应用程序从Google Cloud Endpoint后端获取数据,并且此数据为json格式。当我在ListView中查看此数据时,得到的是:
这是可以预期的,因为我还没有进行任何形式的解析或转换。 我的目标输出是这样的:
我一直在寻找并寻找一种没有运气的方法。 一个示例使用了另一种方法,对于某些我认为不应使用超过5行代码的事情,IMO太复杂了。 另一个从文件读取数据,其他几个也从文件读取数据。
这是从AsyncTask发出的,该端点正在对端点进行调用:
@Override
protected void onPostExecute(List<Student> result) {
ArrayAdapter<Student> arrayAdapter = new ArrayAdapter<Student>(getApplicationContext(), R.layout.row_text, result);
studentListView.setAdapter(new ArrayAdapter<Student>(getApplicationContext(), R.layout.activity_endpoint_launcher, result));
studentListView.setAdapter(arrayAdapter);
}
我尝试添加以下内容:
String jsString = result.toString();
try {
JSONObject jsonObject = new JSONObject(jsString);
String name = jsonObject.getString(TAG_NAME);
Log.d("EndpointLauncher", name);
} catch (JSONException e) {
e.printStackTrace();
}
但我收到错误消息(虽然它不会使应用程序崩溃):
W/System.err﹕ org.json.JSONException: Value [{"grade":50,"matriculationNumber":"453","name":"Vera Brown"},{"grade":90,"matriculationNumber":"123456","name":"Sam Sung"},{"grade":90,"matriculationNumber":"654321","name":"To Shiba"},{"grade":90,"matriculationNumber":"876123","name":"Ann Droid"}] of type org.json.JSONArray cannot be converted to JSONObject
任何帮助将不胜感激。
问题是它返回的是jsonarray,而您正在将其强制转换为对象,请尝试以下操作
JSONArray arr = new JSONArray(jsString);
那你可以做
arr.getJSONObject(0).getString(TAG_NAME);
您可以遍历json数组中的每个元素并将其放在新类中
List<Student> students = new ArrayList<Student>();
for(int i =0; i < arr.length(); i ++)
{
JSONObject jObject = arr.getJSONObject(i);
Student newS = new Student();
newS.name = jObject.getString("name");
etc...
students.add(newS);
}
因此,我终于找到了解决方法。首先,我需要在主项目包(app)
创建一个新的Student类,并将从后端获取的值存储在该类的对象中,而不是从后端获取的值包。
最后,这就是我得到的(
public class EndpointAsyncTask extends AsyncTask(...) {
....
@Override
protected void onPostExecute(List<Student> result) {
String jsString = result.toString();
studentList = new ArrayList<NewStudentClass>();
Student students;
try {
JSONArray jsonArray = new JSONArray(jsString);
for (int i = 0; i < jsonArray.length(); i++) {
students = result.get(i);
String name = students.getName();
int grade = students.getGrade();
long matricNumber = students.getMatriculationNumber();
NewStudentClass st = new NewStudentClass();
st.setMatriculationNumber(matricNumber);
st.setGrade(grade);
st.setName(name);
studentList.add(st);
}
} catch (JSONException e) {
e.printStackTrace();
}
ArrayAdapter<NewStudentClass> arrayAdapter = new ArrayAdapter<NewStudentClass>(getApplicationContext(), R.layout.row_text, studentList);
studentListView.setAdapter(new ArrayAdapter<NewStudentClass>(getApplicationContext(), R.layout.activity_endpoint_launcher, studentList));
studentListView.setAdapter(arrayAdapter);
}
}
当从ListView在NewStudentClass
实例上调用toString()方法时,我得到了想要的输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.