나는 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) {
}
});
}
, 그것은 nullpointer 오류를 던지고 난 요청 URL이 작동하지 않는 생각, 그래서 이걸 가져라.
java.lang.NullPointerException이 : null 객체 참조에 'retrofit2.Call com.loginApi.LoginService.makeUserLogin (java.util.Map)'인터페이스 메소드를 호출하는 시도는
어떻게 할 수 HTTP GET 요청 URL이 부딪히는 것을 알고 있습니까? 어떻게하면 URL을 구축 할 수 있습니까 로그인 후 히트 및 토큰을 얻을?
(loginService! = null)이 시도를 제거하고 한 번 시도해 볼 수 있습니까? 정적 메서드가 새 인스턴스를 반환하도록합니다. 아마 당신은 널 포인트 예외가 발생하는 이유는 응용 프로그램을 실행에서 지워질 수 있습니다 – Stallion
내가 무엇을 제거 할 수 있는지 명확히하면 귀하의 정보가 도움이 될 것입니다? 그리고'(loginService! = null)'은 항상 'true'입니다. –
위의 코드에서 같은 것을 언급하는 한 줄만 볼 수 있습니다. 왜 코드 자체에서 감지 할 수 없습니까? 내가 항상 그 조건을 확인하고 시도보다 새로운 인스턴스를 반환했다. – Stallion