2015-11-30 2 views
0

Я пытаюсь извлечь json-данные с сервера, используя библиотеку волейбола, и сохранить в списке массивов, а затем отобразить данные с помощью счетчика.Json Array return blank ("") при запуске Oncreate (android)

мой код на стороне 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 методе я пытаюсь получить результат и отображения данных с помощью вертушка, но при запуске , возврат результата в первый раз пуст "

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)); 

Любая помощь очень ценится. ,

+0

Вы уверены, что json не равен нулю? –

+0

привет это мой Json URL: http://vinhvumobile.com/phpconnect/geteventdetail.php Я вставляю его в браузере и получаю результат Json –

ответ

0

Ваша функция private void getEventRespondTest возвращает нуль, так как это Void. Что вы делаете with eventDetail = getEventDetail(eventArray);getEventRespondTest функция? Или пытался изменить POST, чтобы ПОЛУЧИТЬ?

UPDATE ПРОВЕРКИ Этот код

@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; 
    } 
+0

. Функция getEventRespondTest предназначена для получения ответа от сервера и сохранения в eventDetail ArrayList. Я предположил, что после вызова getEventRespondTest. EventDetail ArrayList будет обновлен с помощью выборки данных с сервера, а затем я отображу их, используя мой счетчик –

+0

, чтобы положить точку останова в метод onResponse и проверить журнал ошибок. Является ли ваш getEventRespondTest объявленным в Fragment/Activity или в каком-то другом классе? –

+0

как поставить точку перерыва в onRespond? Я только что проверил getEventRespondTest только decare в методе OnCreate –

0

Я думаю, что вам ответ в методе public void onResponse(JSONObject respond)respond is null потому что вы используете JsonObjectRequest, чтобы сделать запрос, но ваш сервер (PHP) возвращают String это ничего не значит JsonObject вернуться. Попробуйте использовать StringRequest вместо JsonObjectRequest. Лучшим решением является код изменения вашего сервера для его возврата. JsonObject следует за этим (php-файл):

header('Content-Type: application/json'); 
echo json_encode(array('result'=>$result), 256); // 256 for UTF-8 data 
+0

Можете ли вы объяснить подробно? Это мой весь php-файл для извлечения данных с сервера require_once ('dbconnect.php'); $ sql = "SELECT EventID, EventTitle, EventDesc, EventTime FROM Event"; $ res = mysqli_query ($ con, $ sql); $ result = array(); в то время как ($ строка = mysqli_fetch_array ($ разреш)) { \t \t array_push ($ результат, массив ( \t \t \t 'событие с кодом' => $ строки [ 'КодСобытия'], \t \t 'EVENTTITLE' => $ строки [ 'EVENTTITLE'], \t \t 'EventDesc' => $ строки [ 'EventDesc'], \t \t 'EventTime' => $ строки [ 'EventTime'] \t \t)); \t} \t echo json_encode (array ('result' => $ result)); \t \t mysqli_close ($ con); ?> –

+0

Можете ли вы объяснить подробно? это мой весь php-файл для извлечения данных. Может помочь мне взглянуть? https://docs.google.com/document/d/16APWQippnSNr0_BWqDQd36kzRA6IpbsLSHKIt0xgEFY/edit –

+0

' $ строки [ 'КодСобытия'], 'EVENTTITLE' => $ строки [ 'EVENTTITLE'] , 'EventDesc' => $ row ['EventDesc'], 'EventTime' => $ row ['EventTime'] )); } mysqli_close ($ con); header ('Content-Type: application/json'); echo json_encode (массив ('result' => $ result), 256); ?> ' – hoangdv