我正在使用sign in with Slack API
。使用动态网址进行改造
为了获得访问令牌,有一个HTTP GET请求:
这是授权的url,我使用这个用于登录并执行经由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) {
}
});
}
现在,人们抛出空指针错误,我想请求的URL不能正常工作,所以我得到这个。
显示java.lang.NullPointerException:尝试上的空对象引用调用接口方法 'retrofit2.Call com.loginApi.LoginService.makeUserLogin(java.util.Map)'
我怎样才能知道,HTTP GET请求url正在打?我怎么能建立网址,并在登录后得到命中,我得到的令牌?
如果(loginService!= null)可以删除此检查并尝试一次吗?让静态方法返回新的实例。也许它可能会在应用程序运行中被清除,这就是为什么你得到零点例外 – Stallion
如果你澄清我可以删除什么,你的信息将对我有帮助?而且,'(loginService!= null)'总是'true'。 –
在上面的代码中,我只能看到一行提到相同的内容。想知道为什么你不能在你的代码中检测到它?正如我所说的总是返回新的实例比检查条件,并尝试 – Stallion