我一直在努力理解Android JSON解析與凌空庫的邏輯。我試圖獲得JSON數組並解析了Volley庫。我理解JSON數據是如何從PHP文件中提取的,但是我遇到了很大的問題。 makeJsonArrayRequest()函數正確運行並從get_data.php文件中解析JSON數組,並在每次迭代中從用戶類添加用戶ArrayList。我分別在onCreate和userLogin函數中調用了此函數。用戶的大小當我調用makeJsonArrayRequest()時,ArrayList等於0。函數在onCreate方法中。但是,當我在userLogin方法中調用makeJsonArrayRequest()函數時,用戶的大小等於非零數字(單擊登錄按鈕時調用此方法)。這是我的問題。爲什麼makeJsonArrayRequest() Create()方法?Android JSON解析排球庫?
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ET_NAME = (EditText) findViewById(R.id.user_name);
ET_PASS = (EditText) findViewById(R.id.user_pass);
pDialog = new ProgressDialog(this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
makeJsonArrayRequest();
Toast.makeText(getApplicationContext(),"Size:" + users.size(),Toast.LENGTH_LONG).show();
}
public void userLogin(View view) {
login_name = ET_NAME.getText().toString();
login_pass = ET_PASS.getText().toString();
String method = "login";
String status = "1";
BackgroundTask backgroundTask = new BackgroundTask(this);
backgroundTask.execute(method, login_name, login_pass, status);
Intent i = new Intent(this,MapsActivity.class);
i.putExtra("username",login_name);
i.putExtra("userpass", login_pass);
makeJsonArrayRequest();
startActivity(i);
Toast.makeText(getApplicationContext(),"Size:" + users.size(),Toast.LENGTH_LONG).show();
}
private void makeJsonArrayRequest() {
showpDialog();
JsonArrayRequest req = new JsonArrayRequest(JSON_URL,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
try {
// Parsing json array response
// loop through each json object
jsonResponse ="";
for (int i = 0; i < response.length(); i++) {
JSONObject person = (JSONObject) response.get(i);
String name = person.getString("name");
String username = person.getString("username");
String password = person.getString("password");
double latitude = Double.parseDouble(person.getString("latitude"));
double longitude = Double.parseDouble(person.getString("longitude"));
String status = person.getString("status");
User user = new User(name,username,password,latitude,longitude,status);
users.add(user);
}
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
hidepDialog();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_SHORT).show();
hidepDialog();
}
});
// Adding request to request queue
AppController.getInstance().addToRequestQueue(req);
}
在嘗試之前,您的Log響應語句中是否有任何區別? 'Log.d(TAG,response.toString());' – napkinsterror
如果沒有顯示日誌語句,可能是因爲你試圖在'onCreate()'中顯示一個對話框,但是你可能沒有正確地做到這一點。在showDialog()之前和之後放置一條日誌語句,以確保它不會在那裏崩潰。 – napkinsterror
我不認爲這個問題背後的原因是與showDialog()。我嘗試了很多方法來解決這個問題,但我無法處理它。 – MurodoBaggins