2016-12-11 9 views
0

REST APIからイメージを取得して、それらをonResponseで正常に配列に割り当てています。しかし、いつもemptyを返すので、ランダムな画像を別のクラスに渡すことはできません。
どうすればいいですか?私を助けてください。この関数は常にnullを返します。私はそれに固執しています

マイfunctionとして、以下:

private String[] headerImages = new String[10]; 

public String fetchOnlyImages(String url) { 
    OkHttpClient okHttpClient = new OkHttpClient.Builder() 
      .readTimeout(60, TimeUnit.SECONDS) 
      .connectTimeout(60, TimeUnit.SECONDS) 
      .authenticator(new Authenticator() { 
       @Override 
       public Request authenticate(Route route, Response response) throws IOException { 
        String credential = Credentials.basic(USERNAME, PASSWORD); 

        return response.request().newBuilder() 
          .header(AUTH, credential).build(); 
       } 
      }).build(); 

    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(NewsService.BASE_URL) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .client(okHttpClient) 
      .build(); 

    final NewsService newsService = retrofit.create(NewsService.class); 
    Call<HolderNode> holderNodeCall = newsService.holderNode(url); 



    holderNodeCall.enqueue(new Callback<HolderNode>() { 
     @Override 
     public void onResponse(Call<HolderNode> call, retrofit2.Response<HolderNode> response) { 
      if (response.isSuccessful()) { 
       HolderNode holderNode = response.body(); 
       MainNode mainNode; 

       try { 
        for (int i = 0; i < holderNode.nodes.size(); i++) { 
         mainNode = holderNode.nodes.get(i); 
         if (mainNode.node.image != null) { 
          String imageUrl = mainNode.node.image.src.substring(0, mainNode.node.image.src.length() - 13); 
          headerImages[i] = imageUrl; 
         } 
        } 
       } catch (Exception ignored) { 
       } 
      } 
     } 

     @Override 
     public void onFailure(Call<HolderNode> call, Throwable t) { 

     } 
    }); 

    Random random = new Random(); 
    int chosenNumber = random.nextInt(headerImages.length); 

    return headerImages[chosenNumber]; 
} 
} 

答えて

3

をあなたは、このメソッドから戻ることはできません - それは、非同期コードがどのように動作するかではありません。

配列があることが保証されている場合は、onResponseメソッド内から処理を続行する必要があります。

あなたの問題はonResponseが今まであなたがfetchOnlyImagesにコールバックのパラメータを提供し、私が見ネットワーク呼び出し

+0

に至ることを渡すことができ


を入力する前に、NULL配列が返されるということです答えに感謝します。 – nuhkoca

関連する問題