Json 数组 return 空白 ("") 当 运行 Oncreate (android)
Json Array return blank ("") when run Oncreate (android)
我正在尝试使用 volley 库从服务器获取 json 数据并存储在数组列表中,然后使用微调器显示数据。
我在 php 服务器端的代码:
echo json_encode(array('result'=>$result));
我的获取数据功能:
private void getEventRespondTest (RequestQueue requestQueue) {
//Creating a string request
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,Config.DATA_URL,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject respond) {
try {
eventArray = respond.getJSONArray("result");
Toast.makeText(Beacon_MainActivity.this,eventArray.toString(),Toast.LENGTH_LONG).show();
eventDetail = getEventDetail(eventArray);
} catch (JSONException e) {
e.printStackTrace();
}
// }
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(Beacon_MainActivity.this, "Unable to fetch data: " +error.getMessage(),Toast.LENGTH_LONG).show();
}
}
);
//Adding request to the queue
requestQueue.add(jsonObjectRequest);
}
private ArrayList getEventDetail(JSONArray j) {
ArrayList event = new ArrayList();
//Traversing through all the items in the json array
for (int i = 0; i < j.length(); i++) {
try {
//Getting json object
JSONObject json = j.getJSONObject(i);
//Adding the name of the event to array list
event.add(json.getString(Config.EVENT_TITLE));
} catch (JSONException e) {
e.printStackTrace();
}
}
Toast.makeText(Beacon_MainActivity.this,event.toString(),Toast.LENGTH_LONG).show();
return event;
}
并且在我的 OnCreate
方法中,我尝试使用微调器获取数据并显示结果,但是当 运行 时,结果 return 第一次是空白“
eventDetail = new ArrayList<>();
eventArray = new JSONArray();
// //get event from server
getEventRespondTest(Volley.newRequestQueue(Beacon_MainActivity.this));
spinner.setAdapter(new ArrayAdapter<>(Beacon_MainActivity.this, android.R.layout.simple_spinner_dropdown_item, eventDetail));
非常感谢任何帮助。谢谢。
您的函数 private void getEventRespondTest
原样返回 null Void
。你在做什么with eventDetail = getEventDetail(eventArray);
getEventRespondTest
函数?或者尝试将 POST 更改为 GET?
更新检查此代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getEventRespondTest();
}
private void getEventRespondTest () {
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
StringRequest request = new StringRequest("http://vinhvumobile.com/phpconnect/geteventdetail.php", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// we got the response, now our job is to handle it
getDataFromJson(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//something happened, treat the error.
Log.e("Error", error.toString());
}
});
queue.add(request);
}
private ArrayList getDataFromJson(String json) {
ArrayList events=new ArrayList();
JSONArray array;
try {
JSONObject gallery=new JSONObject(json);
array=gallery.getJSONArray("result");
//Do sth with it
for(int i=0;i<array.length();i++){
JSONObject jsonOBJ = (JSONObject) array.get(i);
events.add(jsonOBJ.get("EventID"));
}
} catch (JSONException e) {
e.printStackTrace();
}
return events;
}
我认为您在方法 public void onResponse(JSONObject respond)
respond is null
中做出响应,因为您使用 JsonObjectRequest
发出请求,但您的服务器 (php) return a String
对 JsonObject
到 return 毫无意义。尝试使用 StringRequest
而不是 JsonObjectRequest
。最佳解决方案是为它更改服务器代码 return `JsonObject' 遵循此(php 文件):
header('Content-Type: application/json');
echo json_encode(array('result'=>$result), 256); // 256 for UTF-8 data
我正在尝试使用 volley 库从服务器获取 json 数据并存储在数组列表中,然后使用微调器显示数据。
我在 php 服务器端的代码:
echo json_encode(array('result'=>$result));
我的获取数据功能:
private void getEventRespondTest (RequestQueue requestQueue) {
//Creating a string request
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,Config.DATA_URL,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject respond) {
try {
eventArray = respond.getJSONArray("result");
Toast.makeText(Beacon_MainActivity.this,eventArray.toString(),Toast.LENGTH_LONG).show();
eventDetail = getEventDetail(eventArray);
} catch (JSONException e) {
e.printStackTrace();
}
// }
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(Beacon_MainActivity.this, "Unable to fetch data: " +error.getMessage(),Toast.LENGTH_LONG).show();
}
}
);
//Adding request to the queue
requestQueue.add(jsonObjectRequest);
}
private ArrayList getEventDetail(JSONArray j) {
ArrayList event = new ArrayList();
//Traversing through all the items in the json array
for (int i = 0; i < j.length(); i++) {
try {
//Getting json object
JSONObject json = j.getJSONObject(i);
//Adding the name of the event to array list
event.add(json.getString(Config.EVENT_TITLE));
} catch (JSONException e) {
e.printStackTrace();
}
}
Toast.makeText(Beacon_MainActivity.this,event.toString(),Toast.LENGTH_LONG).show();
return event;
}
并且在我的 OnCreate
方法中,我尝试使用微调器获取数据并显示结果,但是当 运行 时,结果 return 第一次是空白“
eventDetail = new ArrayList<>();
eventArray = new JSONArray();
// //get event from server
getEventRespondTest(Volley.newRequestQueue(Beacon_MainActivity.this));
spinner.setAdapter(new ArrayAdapter<>(Beacon_MainActivity.this, android.R.layout.simple_spinner_dropdown_item, eventDetail));
非常感谢任何帮助。谢谢。
您的函数 private void getEventRespondTest
原样返回 null Void
。你在做什么with eventDetail = getEventDetail(eventArray);
getEventRespondTest
函数?或者尝试将 POST 更改为 GET?
更新检查此代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getEventRespondTest();
}
private void getEventRespondTest () {
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
StringRequest request = new StringRequest("http://vinhvumobile.com/phpconnect/geteventdetail.php", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// we got the response, now our job is to handle it
getDataFromJson(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//something happened, treat the error.
Log.e("Error", error.toString());
}
});
queue.add(request);
}
private ArrayList getDataFromJson(String json) {
ArrayList events=new ArrayList();
JSONArray array;
try {
JSONObject gallery=new JSONObject(json);
array=gallery.getJSONArray("result");
//Do sth with it
for(int i=0;i<array.length();i++){
JSONObject jsonOBJ = (JSONObject) array.get(i);
events.add(jsonOBJ.get("EventID"));
}
} catch (JSONException e) {
e.printStackTrace();
}
return events;
}
我认为您在方法 public void onResponse(JSONObject respond)
respond is null
中做出响应,因为您使用 JsonObjectRequest
发出请求,但您的服务器 (php) return a String
对 JsonObject
到 return 毫无意义。尝试使用 StringRequest
而不是 JsonObjectRequest
。最佳解决方案是为它更改服务器代码 return `JsonObject' 遵循此(php 文件):
header('Content-Type: application/json');
echo json_encode(array('result'=>$result), 256); // 256 for UTF-8 data