2016-11-10 11 views
1

このURLを構築することができます。どのように私はこれは私が結果を照会するために使用していますURLで改造APIのため

http://query.yahooapis.com/v1/public/yql?q=select+*+from+yahoo.finance.historicaldata+where+symbol+%3D+%22YHOO%22+and+startDate+%3D+%222015-11-10%22+and+endDate+%3D+%222016-11-10%22&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback= 

私がこれまでに最初のためのレトロフィットを使用していますこれは私がURLを構築する方法である:

public static String getStockDataUrl(String stock_symbol){ 
     String startDate = Utils.getLastYear() ; 
     String endDate = Utils.getTodayDate(); 
     try{ 
      String YAHOO_BASE_URL = Constants.YAHOO_BASE_QUERY; 
      String QUERY_STOCK_DATA = Constants.QUERY_STOCK_DATA + 
        Constants.SYMBOL_QUERY +stock_symbol+ Constants.START_DATE_QUERY +startDate+"\" " + 
        Constants.END_DATE_QUERY + endDate+"\""; 
      return YAHOO_BASE_URL + URLEncoder.encode(QUERY_STOCK_DATA, "UTF-8") 
        + Constants.FORMAT_QUERY 
        + Constants.TABLES_CALLBACK_QUERY; 
     }catch (Exception e){ 
      e.printStackTrace(); 
     } 
     return null; 
    } 

これらは、私は、ユーザーからのstock_symbol入力に持っているURL

public static final String YAHOO_BASE_QUERY = "http://query.yahooapis.com/v1/public/yql?q="; 
    public static final String QUERY_STOCK_DATA = "select * from yahoo.finance.historicaldata where "; 
    public static final String SYMBOL_QUERY = "symbol = \""; 
    public static final String START_DATE_QUERY = "\" and startDate = \""; 
    public static final String END_DATE_QUERY = "and endDate = \""; 
    public static final String FORMAT_QUERY = "&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables."; 
    public static final String TABLES_CALLBACK_QUERY = "org%2Falltableswithkeys&callback="; 

を作成するために使用される定数であり、そしてトンを作成します彼は去年の日付と今日の日付で私はどのようにRetrofit APIのインターフェイスでこれを達成することができますurl?

java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List com.android.stockhawk.quotes.QuotesResponse.getResults()' on a null object reference 
                  at com.android.stockhawk.service.StockTaskService$1.onResponse(StockTaskService.java:175) 
                  at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68) 
                  at android.os.Handler.handleCallback(Handler.java:746) 
                  at android.os.Handler.dispatchMessage(Handler.java:95) 
                  at android.os.Looper.loop(Looper.java:148) 
                  at android.app.ActivityThread.main(ActivityThread.java:5443) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
+0

の値は、あなたのコードとクラッシュログ – grantonzhuang

+0

@grantonzhunagを貼り付けるような値私はあなたには、いくつかのIMで私に連絡することができますクラッシュログを掲載していますか? – Contextioner

+0

@grantonzhunag私はあなたが()メソッド – Contextioner

答えて

0

インタフェース:

この

は、これは私が

@GET 
     Call<QuotesResponse> getQuotes(@Url String url); 

を作成したQuotesAPIインタフェースこれらはLogCatの詳細あるある

public void getStockQuotes(String symbol) { 
     QuotesAPI apiService = 
       ApiClient.getClient().create(QuotesAPI.class); 

     String query = Utils.getStockDataUrl(symbol); 

     Log.d(LOG_TAG, query); 

     Call<QuotesResponse> call = apiService.getQuotes(query); 

     call.enqueue(new Callback<QuotesResponse>() { 

      @Override 
      public void onResponse(Call<QuotesResponse> call, retrofit2.Response<QuotesResponse> response) { 
       List<Quotes> movies = response.body().getResults(); 
       Log.d(TAG, "Number of movies received: " + movies.size()); 
      } 

      @Override 
      public void onFailure(Call<QuotesResponse> call, Throwable t) { 
       Log.d(TAG, t.toString()); 
      } 
     }); 

改造してデータを照会する方法であり、 Retrofitを使用するときに宣言する必要があります。このインタフェースの

public interface StockDataService {} 

、メソッド宣言:options 実際のキーとして

// String int @GET annotation should be a subPath and you should declare a baseUrl 
@GET("http://query.yahooapis.com/v1/public/yql") 
Call<Result> access(@QueryMap Map<String, String> options); 

プット列 "Q"、 "フォーマット"、 "診断"、 "ENV"、 "コールバック" options

+0

ものの – Contextioner

+0

のためのユーザー入力を取得する必要がありますが、問題はそれがリスト – Contextioner

+0

@Contextionerはあなたのコードとクラッシュログを貼り付け得ることに墜落したということですどうもありがとう – grantonzhuang

関連する問題