私はsign in with Slack API
を使用しています。改造した動的URLを使用
アクセストークンを取得するには、HTTPのGET要求がある:
これはURLを認可され、私はWebView
を経由して、ログインのためにこれを使用して実装:
ログイン統合にWebView
を使用しています。 shouldOverrideUrlLoading
メソッド内で、私の活動のクラスで
public class LoginApiClient {
private static LoginService loginService;
public static LoginService getLoginService(){
if (loginService != null){
Retrofit retrofitClient = new Retrofit.Builder()
.baseUrl("https://slack.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
loginService = retrofitClient.create(LoginService.class);
}
return loginService;
}
}
public interface LoginService {
@FormUrlEncoded
@GET("api/oauth.access")
Call<LoginResponse> makeUserLogin(@FieldMap Map<String, String > parameter);
}
public class LoginResponse {
.....
@SerializedName("access_token")
@Expose
private String accessToken;
.....
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
}
:
私のクラスは今
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("http://localhost:8000/")) {
UrlQuerySanitizer urlQuerySanitizer = new UrlQuerySanitizer(url);
codeParams = urlQuerySanitizer.getValue("code");
Log.e(TAG, "shouldOverrideUrlLoading: " + codeParams);
retrieveToken();
return true;
} else {
view.loadUrl(url);
return true;
}
}
private void retrieveToken() {
LoginService loginService = LoginApiClient.getLoginService();
Map<String, String> urlParameter = new HashMap<>();
urlParameter.put("client_id", StringConstant.CLIENT_ID);
urlParameter.put("client_secret", StringConstant.CLIENT_SECRET);
urlParameter.put("code", codeParams);
Call<LoginResponse> call = loginService.makeUserLogin(urlParameter);
call.enqueue(new Callback<LoginResponse>() {
@Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
//navigate to next activity after saving token
}
@Override
public void onFailure(Call<LoginResponse> call, Throwable t) {
}
});
}
、それはnullポインタエラーを投げていると私は要求URLが機能していないと思うので、私これを取れ。
java.lang.NullPointerExceptionが:NULLオブジェクト参照インターフェイスメソッド 'retrofit2.Call com.loginApi.LoginService.makeUserLogin(java.util.Map)' を起動しようとし
どのようにすることができHTTP GETリクエストのURLがヒットしていることを知っていますか?私はどのようにURLを構築するために行うことができますログイン後、ヒットし、私はトークンを取得?
(loginService!= null)と一度試してください。静的メソッドが新しいインスタンスを返すようにします。おそらくアプリケーション実行中にクリアされる可能性があります。なぜヌルポイント例外が発生するのですか? – Stallion
削除できるものを明確にすれば、あなたの情報は役に立ちます。そして、 '(loginService!= null)'は常に 'true'です。 –
あなたの上記のコードでは、私は同じことを言及する行は1つしか見ることができません。なぜコード自体で検出できないのだろうか?私はいつもその状態をチェックし、試してみるよりも新しいインスタンスを返すと言ったように – Stallion