簡體   English   中英

如何在onPerformSync中實現Yelp Api

[英]How to implement Yelp Api inside onPerformSync

你們能不能給我一點推動。 我一直試圖在onPerformSyn中運行yelp api。 我怎么可能這樣做? 我收到以下錯誤。 “沒有空的構造函數”我正在使用這篇文章來嘗試創建構造函數,但它對我不起作用。
請幫助表示贊賞。

注意 :在Yelp響應之后,我將把數據存儲到SQLite(Scheme Library)中,這不是代碼的結尾。

public class SyncAdapter extends AbstractThreadedSyncAdapter{
    public final String LOG_TAG = SyncAdapter.class.getSimpleName();
    public static final int SYNC_INTERVAL = 4;//60 * 180;
    public static final int SYNC_FLEXTIME = SYNC_INTERVAL/3;
    private static final long DAY_IN_MILLIS = 1000;//1000 * 60 * 60 * 24;
    private static final int WEATHER_NOTIFICATION_ID = 3004;

    private GoogleApiClient mGoogleApiClient;
    private YelpAPI yelpAPI;
    private Location mLastLocation;

    public SyncAdapter(Context context, boolean autoInitialize) {
        super(context, autoInitialize);

//        YelpAPIFactory apiFactory = new YelpAPIFactory(BuildConfig.YELP_CONSUMER_KEY, BuildConfig.YELP_CONSUMER_SECRET, BuildConfig.YELP_TOKEN, BuildConfig.YELP_TOKEN_SECRET);
//        yelpAPI = apiFactory.createAPI();
    }


    @Override
    public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) {


        class YelpApi2 extends DefaultApi10a {

            @Override
            public String getAccessTokenEndpoint() {
                return null;
            }

            @Override
            public String getAuthorizationUrl(Token arg0) {
                return null;
            }

            @Override
            public String getRequestTokenEndpoint() {
                return null;
            }

        }

        class Yelp {
            OAuthService service;
            Token accessToken;
            public Yelp(String consumerKey, String consumerSecret,     String token, String tokenSecret) {
                this.service = new    ServiceBuilder().provider(YelpApi2.class).apiKey(consumerKey).apiSecret(consumerSecret).build();
                this.accessToken = new Token(token, tokenSecret);
            }

            public String search(String term, double latitude, double longitude) {
                OAuthRequest request = new OAuthRequest(Verb.GET, "http://api.yelp.com/v2/search");
                request.addQuerystringParameter("term", term);
                request.addQuerystringParameter("ll", latitude + "," + longitude);
                this.service.signRequest(this.accessToken, request);
                Response response = request.send();
                return response.getBody();
            }

        }



            Yelp yelp = new Yelp(BuildConfig.YELP_CONSUMER_KEY, BuildConfig.YELP_CONSUMER_SECRET, BuildConfig.YELP_TOKEN, BuildConfig.YELP_TOKEN_SECRET);
            String response = yelp.search("church", 30.361471, -87.164326);

            System.out.println(response);
            }

我跟着這個嘖嘖 ,但我沒有做.jar部分,我無法導入它,而是我在gradle中使用了這一行。

        compile 'com.yelp.clientlib:yelp-android:2.0.0'

Error I'm getting
=========================================

    FATAL EXCEPTION: SyncAdapterThread-1
    Process: mem.edu.joshua, PID: 14149
    org.scribe.exceptions.OAuthException: Error while creating the Api object
    at org.scribe.builder.ServiceBuilder.createApi(ServiceBuilder.java:59)
    at org.scribe.builder.ServiceBuilder.provider(ServiceBuilder.java:45)
    at mem.edu.joshua.sync.SyncAdapter$1Yelp.<init>(SyncAdapter.java:99)
    at mem.edu.joshua.sync.SyncAdapter.onPerformSync(SyncAdapter.java:116)
    at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:259)

    Caused by: java.lang.InstantiationException: can't instantiate class mem.edu.joshua.sync.SyncAdapter$1YelpApi2; no empty constructor
    at java.lang.Class.newInstanceImpl(Native Method)
    at java.lang.Class.newInstance(Class.java:1208)


  [1]: http://stackoverflow.com/questions/11859403/no-empty-constructor-when-create-a-service
  [2]: https://thysmichels.com/2011/12/30/yelp-api-example/#comment-18031

問題是ServiceBuilder試圖通過反射來實例化類。 這將在使用本地或內部類時引起問題,因為這些類別需要額外的“不可見”參數。 (相關問題: 如何在Java中用反射實例化內部類?

因此,解決方案是將Yelp類和YelpApi2類提取到自己的文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM