我正在使用sign in with Slack API
。
要获取访问令牌,需要HTTP GET请求:
这是授权网址,我使用它进行登录并通过WebView
实现:
我正在使用WebView
进行登录集成。
我的课程是:
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;
}
}
在我的活动课程中,shouldOverrideUrlLoading
方法内部:
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:尝试在空对象引用上调用接口方法'retrofit2.Call com.loginApi.LoginService.makeUserLogin(java.util.Map)'
我怎么知道,HTTP GET请求网址正在命中?我该如何建立网址,登录后它会被点击,我得到令牌?
答案 0 :(得分:0)
您可以将https://slack.com/
用作基本网址,并在apiinterface中使用动态网址创建所有方法,例如..
@GET("api/oauth.access")
Call<JsonElement> oauth.access(@QueryMap HashMap<String, String> body);
@GET("oauth/authorize")
Call<JsonElement> oauth.access(@QueryMap HashMap<String, String> body);
答案 1 :(得分:0)
可能是由于以下语句检索了loginService对象。
删除此项检查
GetCultures()
并查看是否结算。由于内存分配/解除分配,应用程序可能已经清除了变量