2017-03-09 11 views
0

Androidアプリケーションは、RESTfulサービスからconfig jsonファイルを取得するために、app startで最初のhttpリクエストを行う必要があります。この要求はVolleyによって行われます。 アプリケーションがデータを取得すると、MainActivityが開始されます。また、特定のURIを持つアプリケーションでWebViewを開くためにいくつかのディープリンクを定義しました。ディープリンクはSplashActivityによって処理される必要があります。これは、configをVolleyが最初にロードする必要があるためです。これが正しいかどうかは分かりません。 Applicationクラスでconfigを要求して、どのアクティビティを最初に起動してもconfigを常に利用できるようにするのはどうでしょうか?Android:アプリ起動時の最初のリクエスト

+0

アプリケーションクラスから設定を要求する方が適切です。 –

+0

非同期要求の処理方法を説明できますか? MainActivityは、リクエストが完了した場合にのみ表示されます。 – Ikno0wit

+0

が回答を追加しました。 –

答えて

1

これは正しい方法です。 Splashアクティビティでは、あなたのディープリンクで着信インテントを処理し、Volleyリクエストを発生させ、その場合にのみあなたのロジックで進んでいく必要があります。

ところで、その間にユーザーにいくつかのローダー/進捗状況を表示し、もちろんエラーを処理する必要があります。

1

Applicationクラスで非同期呼び出しを行っている場合は、コールバックで要求を行い、必要なアクティビティを表示できます。

public interface ConfigListener { 
    public void onConfigReceived(List<ofSomething> list, boolean error, String message); 
} 

private void requestConfig(){ 
     final DownloadUsingVolley downloader = new DownloadUsingVolley(getActivity()); 
     downloader.retrieveData(new ConfigListener() { 
      @Override 
      public void onConfigReceived(List<ofSomething> list, boolean error, String message) { 
       //Show your required activity here 
      } 
     }); 
} 

private void retrieveData(String url, final ConfigListener configListener){ 
    final JsonObjectRequest request = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>(){ 
     @Override 
     public void onResponse(JSONObject response) { 
      try { 
       //parse 
       configListener.onConfigReceived(result,false,null); 
      }catch (JSONException e){ 
       configListener.onConfigReceived(0,true,e.getMessage()); 
      } 
     } 
    },new Response.ErrorListener(){ 
     @Override 
     public void onErrorResponse(VolleyError volleyError) { 
      configListener.onConfigReceived(0,true,volleyError.getMessage()); 
     } 
    }); 
    //adding request into the queue 
    ApplicationClass.getInstance().addToRequestQueue(request,"aTag"); 
} 
関連する問題