Не могли бы вы, ребята, дать мне немного толчок здесь. Я застрял, пытаясь запустить визг api внутри onPerformSyn. Как я могу это сделать? Я получаю ошибку ниже. «Нет пустого конструктора» Я использую этот post, чтобы попытаться создать конструктор, но он не работает для меня.
Пожалуйста, помогите с оценкой.
Примечание: После ответа Yelp я буду хранить данные в SQLite (Scheme Library), так что это не конец кода.Как реализовать Yelp Api внутри onPerformSync
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);
}
Я после этого tut, , но я не делал .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
Вы пытались просто добавить пустой конструктор в свой SyncAdapter? Например: public SyncAdapter() {} –
Тим, я просто попробовал. Не уверен, что вы заметили, что конструктор SyncAdapter уже есть, но если я попробую, как вы говорите «пусто», он дает мне ошибку с запросом super(), если я делаю super(), тогда он просит что-то зайти в скобки с ошибкой 'не может решить метод super()'. Поэтому я должен добавить Context и Boolean так же, как и сейчас. – Erik
Итак, рассмотрев это снова, я понял, что это не ваш SyncAdapter. Но ваша реализация класса YelpApi2. Исключение, возникшее в вашем случае, появляется (по моему опыту), если вашему классу (или суперклассу) требуется конструктор по умолчанию «no args». Попробуйте добавить пустой конструктор в класс YelpApi2; общедоступный (или закрытый) YelpApi2() {}; –