Я пытаюсь создать приложение для Android, которое соединяется с API для данных Bodymedia (это повязка, которая определяет уровень вашей физической активности). Я использую библиотеку писца. Проблема, с которой я столкнулся, заключается в том, что функция "shouldOverrideUrlLoading" никогда не вызывается.
Вот код:
package com.android.fitapp;
import org.scribe.builder.ServiceBuilder;
import org.scribe.model.OAuthRequest;
import org.scribe.model.Response;
import org.scribe.model.Token;
import org.scribe.model.Verb;
import org.scribe.model.Verifier;
import org.scribe.oauth.OAuthService;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;
public class VisWeight extends Activity {
final static String API_KEY = "[key]";
final static String API_SECRET = "[secret]";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.oauth);
final OAuthService oauthService = new ServiceBuilder()
.provider(new BodyMediaAPI(API_KEY))
.apiKey(API_KEY)
.apiSecret(API_SECRET)
.build();
final Token requestToken = oauthService.getRequestToken();
final String authURL = oauthService.getAuthorizationUrl(requestToken);
final TextView textView = (TextView)findViewById(R.id.textview);
final WebView webview = (WebView) findViewById(R.id.webview);
webview.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading (WebView view, String url) {
if(url.startsWith("http")){
webview.setVisibility(View.GONE);
Uri uri = Uri.parse(url);
String verifier = uri.getQueryParameter("oauth_verifier");
Verifier v = new Verifier(verifier);
Token accessToken = oauthService.getAccessToken(requestToken, v);
OAuthRequest req = new OAuthRequest(Verb.GET, "http://api.bodymedia.com/v1.0/goal/current?api_key=" + API_KEY);
oauthService.signRequest(accessToken, req);
Response response = req.send();
textView.setText(response.getBody());
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
});
webview.loadUrl(authURL);
}
}
Есть идеи, что не так?
Для справки, этот код был адаптирован из (предположительно работающего) кода, предоставленного в http://schwiz.net/blog/2011/using-scribe-with-android/,, который демонстрировал подключение к Twitter API через писец.