我正在使用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