Сетевой ответ зависит от времени. Когда вы вызываете тост снаружи, у него до сих пор нет данных. Но внутри метода успеха есть данные. Потому что этот метод вызывается после получения данных. Если вы хотите работать с данными после получения с сервера, вы можете использовать интерфейс Java.
В вашем случае что-то вроде:
public interface ResponseListener{
void onResponseReceived(ArrayList<SanPham> sanPhams);
}
В вашем классе:
ArrayList<SanPham> sanPhams;
ResponseListener listener;
затем внутри метода onResponse:
for (int i = 0; i < response.length(); i++) {
try {
JSONObject jsonObject = response.getJSONObject(i);
SanPham sanPham = new SanPham();
sanPham.setMaSanPham(jsonObject.getString("maSanPham"));
sanPham.setTenSanPham(jsonObject.getString("tenSanPham"));
sanPham.setHinhAnh(jsonObject.getString("hinhAnh"));
sanPham.setGiaBan(jsonObject.getInt("giaBan"));
sanPham.setThongSoKyThuat(jsonObject.getString("thongSoKyThuat"));
sanPham.setMoTa(jsonObject.getString("moTa"));
sanPhams.add(sanPham);
} catch (JSONException e) {
e.printStackTrace();
}
}
Toast.makeText(getApplicationContext(), String.valueOf(sanPhams.size()), Toast.LENGTH_SHORT).show();
listener.onResponseReceived(sanPhams);