Java 如何在onPerformSync中实现Yelp Api

Java 如何在onPerformSync中实现Yelp Api,java,android,android-syncadapter,yelp,Java,Android,Android Syncadapter,Yelp,你们能帮我推一下吗。我一直在尝试在onPerformSyn中运行yelpapi。 我怎样才能做到这一点。?我得到下面的错误。“没有空构造函数” 我用它来尝试创建构造函数,但它对我不起作用 谢谢你的帮助 注意:在Yelp响应之后,我将把数据存储到SQLite(Scheme库)中,这样代码就不会结束了 public class SyncAdapter extends AbstractThreadedSyncAdapter{ public final String LOG_TAG = Sync

你们能帮我推一下吗。我一直在尝试在onPerformSyn中运行yelpapi。 我怎样才能做到这一点。?我得到下面的错误。“没有空构造函数” 我用它来尝试创建构造函数,但它对我不起作用
谢谢你的帮助

注意:在Yelp响应之后,我将把数据存储到SQLite(Scheme库)中,这样代码就不会结束了

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
编译'com.yelp.clientlib:yelpandroid:2.0.0'
我犯了一个错误
=========================================
严重异常:SyncAdapterThread-1
进程:mem.edu.joshua,PID:14149
org.scribe.exceptions.OAutheException:创建Api对象时出错
位于org.scribe.builder.ServiceBuilder.createApi(ServiceBuilder.java:59)
位于org.scribe.builder.ServiceBuilder.provider(ServiceBuilder.java:45)
在mem.edu.joshua.sync.SyncAdapter$1Yelp。(SyncAdapter.java:99)
在mem.edu.joshua.sync.SyncAdapter.onPerformSync(SyncAdapter.java:116)
位于android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:259)
原因:java.lang.InstanceException:无法实例化类mem.edu.joshua.sync.SyncAdapter$12;没有空构造函数
位于java.lang.Class.newInstanceImpl(本机方法)
位于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试图通过反射实例化类。这在使用本地类或内部类时会导致问题,因为这些类需要一个额外的“不可见”参数。(相关问题:)


因此,解决方案是将Yelp类和YelpApi2类提取到它们自己的文件中

您是否尝试过向SyncAdapter添加一个空构造函数?像这样:public SyncAdapter(){}蒂姆,我刚试过。不确定您是否注意到SyncAdapter构造函数已经存在,但是如果我尝试您说“empty”的方式,它会给我一个请求super()的错误,如果我执行super(),那么它会请求在括号内添加一些内容,错误为“cannot resolve method super()”。所以我必须添加上下文和布尔值,就像现在一样。所以在再次查看之后,我意识到它实际上不是你的SyncAdapter。但是您的YelpApi2类的实现。根据我的经验,如果您的类(或超类)需要默认的“no args”构造函数,则会出现在您的案例中弹出的异常。尝试向YelpApi2类添加一个空构造函数;公共(或私人)2(){};嗨,蒂姆。我记得我已经试过了,因为那是错误指向的地方,但不管怎样,我回去再试了一次,我仍然得到了错误。你已经成为我解决这个问题的最佳选择,我很感激。更好的办法是完全提取Yelp类并给它自己的.java文件。我认为简单地将其更改为类范围的类也不会有帮助。当试图通过反射实例化它时,它仍然会崩溃。所以您需要:1)一个无参数构造函数。2) 在单独的文件中定义的类。