2016-09-23 29 views
0

我想从JSON获取数据,然后将其返回到数组中,但数组总是返回null,因为我的程序不会进入onResponse方法。这是为什么跳过了onResponse方法?

我想在RecyclerView中显示这些数据。起初它的工作,但现在它不会工作,我不知道为什么...

private SzabadEuMusorok[] getSzabadEuMusoroks(){ 
    if (isNetworkAvaible()){ 
     OkHttpClient client = new OkHttpClient(); 
     Request request = new Request.Builder().url("validurl").build(); 

     Call call = client.newCall(request); 
     call.enqueue(new Callback() { 
      @Override 
      public void onFailure(Call call, IOException e) { 
       alertUserAboutError(); 
      } 

      @Override 
      public void onResponse(Call call, Response response) throws IOException { 
       try { 
        String jsonData = response.body().string(); 
        Log.v("JSONDATA", jsonData); 
        if(response.isSuccessful()){ 
         JSONArray jsonArray = new JSONArray(jsonData); 

         mSzabadEuMusoroks = new SzabadEuMusorok[jsonArray.length()]; 

         for (int i = 0; i < jsonArray.length(); i++){ 
          JSONObject jsonObject = jsonArray.getJSONObject(i); 
          SzabadEuMusorok szabadEuMusorok = new SzabadEuMusorok(); 
          JSONArray elementTexts = jsonObject.getJSONArray("element_texts"); 

          JSONObject titleObject = elementTexts.getJSONObject(0); 
          szabadEuMusorok.setTitile(titleObject.getString("text")); 

          JSONObject subjectObject = elementTexts.getJSONObject(3); 
          szabadEuMusorok.setSubject(subjectObject.getString("text")); 

          JSONObject mainObject = jsonObject.getJSONObject("files"); 
          szabadEuMusorok.setVideoURL(mainObject.getString("url")); 

          mSzabadEuMusoroks[i] = szabadEuMusorok; 
         } 
        } 
       } catch (JSONException e) { 
        Log.e("JSONEXCEPTION", "Exception caught: ", e); 
       } 
      } 
     }); 
    } 
    else{ 
     Toast.makeText(this, R.string.network_unavaible_message, Toast.LENGTH_LONG).show(); 
    } 
    return mSzabadEuMusoroks; 
+0

我Fi Go可以通过它与调试器,它作品... – Marci

回答

1

您的代码在逻辑意义上是错误的。因为对Web服务的调用是异步的,所以当你使用“return”时,数组是空的,当你的数据在结果中并不重要,因为你已经加载了RecyclerView。解决方案将是您实现回调函数或在RecyclerView中使用notifydatasetchanged。

检查链接。

Using callbacks in android

Using notifydatasetchanged

---------- ---------- notifydatasetchanged

for (int i = 0; i < jsonArray.length(); i++){ 
    JSONObject jsonObject = jsonArray.getJSONObject(i); 
    SzabadEuMusorok szabadEuMusorok = new SzabadEuMusorok(); 
    JSONArray elementTexts = jsonObject.getJSONArray("element_texts"); 

    JSONObject titleObject = elementTexts.getJSONObject(0); 
    szabadEuMusorok.setTitile(titleObject.getString("text")); 

    JSONObject subjectObject = elementTexts.getJSONObject(3); 
    szabadEuMusorok.setSubject(subjectObject.getString("text")); 

    JSONObject mainObject = jsonObject.getJSONObject("files"); 
    szabadEuMusorok.setVideoURL(mainObject.getString("url")); 

    mSzabadEuMusoroks[i] = szabadEuMusorok; 
} 
//LINE ADDED----------------------------------------------------- 
yourAdapterInTheRecyclerView.notifyDataSetChanged(); 
//LINE ADDED----------------------------------------------------- 
+0

它仍然不会工作... – Marci

+0

我应该在哪里放一个回调()?我不明白... – Marci

相关问题