Фактически мое приложение использует linkedin login через linkedin app и webview. Вход с помощью linkedin работает нормально, но если в случае, если приложение linkedin недоступно, я использую webview для входа в систему. Это также отлично работает, но сегодня он внезапно застрял в некоторых строках исключений кода. Я получаю нулевой токен доступа в моем диалоговом окне Linkedin, поэтому мне нравится ставить try catch, но после этого он показывает пустой веб-просмотр, я не знаю, что делать. вот мой диалог код LinkedInЗастрял в Linkedin login через Webview
public class LinkedinDialog extends Dialog
{
private ProgressDialog progressDialog = null;
public static LinkedInApiClientFactory factory;
public static LinkedInOAuthService oAuthService;
public static LinkedInRequestToken liToken;
private WebView mWebView;
private Context mContext;
public LinkedinDialog(Context context, ProgressDialog progressDialog)
{
super(context);
mContext = context;
this.progressDialog = progressDialog;
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
requestWindowFeature(Window.FEATURE_NO_TITLE);// must call before super.
super.onCreate(savedInstanceState);
setContentView(R.layout.ln_dialog);
setWebView();
}
/**
* set webview.
*/
private void setWebView()
{
mWebView = (WebView) findViewById(R.id.webkitWebView1);
mWebView.getSettings().setJavaScriptEnabled(true);
try {
LinkedinDialog.oAuthService = LinkedInOAuthServiceFactory.getInstance().createLinkedInOAuthService(AppConstants.LINKEDIN_CONSUMER_KEY, AppConstants.LINKEDIN_CONSUMER_SECRET);
LinkedinDialog.factory = LinkedInApiClientFactory.newInstance(AppConstants.LINKEDIN_CONSUMER_KEY, AppConstants.LINKEDIN_CONSUMER_SECRET);
LinkedinDialog.liToken = LinkedinDialog.oAuthService.getOAuthRequestToken(AppConstants.OAUTH_CALLBACK_URL);
mWebView.loadUrl(LinkedinDialog.liToken.getAuthorizationUrl());
mWebView.setWebViewClient(new HelloWebViewClient());
mWebView.setPictureListener(new PictureListener() {
@Override
public void onNewPicture(WebView view, Picture picture) {
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
}
});
}catch (ExceptionInInitializerError e){
AppLogs.printLogs("ExceptionInInitializerError :: " , " err ::");
LinkedinDialog.this.dismiss();
mWebView.goBack();
}catch (NoClassDefFoundError ex){
AppLogs.printLogs("NoClassDefFoundError :: " , " err ::");
ex.printStackTrace();
LinkedinDialog.this.dismiss();
mWebView.goBack();
}catch (Exception ee){
LinkedinDialog.this.dismiss();
mWebView.goBack();
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_DOWN){
switch(keyCode)
{
case KeyEvent.KEYCODE_BACK:
if (mWebView.canGoBack()) {
mWebView.goBack();
} else {
cancel();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
class HelloWebViewClient extends WebViewClient
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
if (url.contains(AppConstants.OAUTH_CALLBACK_URL))
{
Uri uri = Uri.parse(url);
String verifier = uri.getQueryParameter("oauth_verifier");
cancel();
for (OnVerifyListener d : listeners)
{
// call listener method
d.onVerify(verifier);
}
}
else if (url.contains("https://www.google.co.in/"))
{
cancel();
}
else
{
Log.e("LinkedinSample", "url: " + url);
view.loadUrl(url);
}
return true;
}
}
/**
* List of listener.
*/
private List<OnVerifyListener> listeners = new ArrayList<OnVerifyListener>();
/**
* Register a callback to be invoked when authentication have finished.
*
* @param data
* The callback that will run
*/
public void setVerifierListener(OnVerifyListener data)
{
listeners.add(data);
}
/**
* Listener for oauth_verifier.
*/
public interface OnVerifyListener
{
/**
* invoked when authentication have finished.
*
* @param verifier
* oauth_verifier code.
*/
public void onVerify(String verifier);
}
}
это функция вызывает на кнопку входа
private void linkedInLogin()
{
mProgressDialog = new ProgressDialog(LoginActivity.this);
mProgressDialog.setMessage(AppConstants.sLoadingMsg);
mProgressDialog.setCancelable(true);
mProgressDialog.show();
d = new LinkedinDialog(LoginActivity.this,mProgressDialog);
d.show();
d.setVerifierListener(new LinkedinDialog.OnVerifyListener() {
@SuppressLint("NewApi")
@Override
public void onVerify(String verifier) {
try {
accessToken = LinkedinDialog.oAuthService.getOAuthAccessToken(LinkedinDialog.liToken, verifier);
LinkedinDialog.factory.createLinkedInApiClient(accessToken);
client = factory.createLinkedInApiClient(accessToken);
AppLogs.printLogs("LinkedinSample", "ln_access_token: " + accessToken.getToken());
mAccessTokenLogin = accessToken.getToken();
com.google.code.linkedinapi.schema.Person p = null;
p = client.getProfileForCurrentUser(EnumSet.of(
ProfileField.ID, ProfileField.FIRST_NAME,
ProfileField.LAST_NAME, ProfileField.HEADLINE,
ProfileField.SUMMARY, ProfileField.PUBLIC_PROFILE_URL,
ProfileField.INDUSTRY, ProfileField.PICTURE_URL,
ProfileField.LOCATION, ProfileField.LOCATION_NAME, ProfileField.EMAIL_ADDRESS));
AppLogs.printLogs("linkedin id"," :: "+p.getId());
UserLinkedInData userLinkedInData = UserLinkedInData.getInstance();
try {
if (p.getEmailAddress() == null | p.getEmailAddress().isEmpty()) {
userLinkedInData.setmEmailAddress(AppConstants.sNotAvailable);
} else {
userLinkedInData.setmEmailAddress(p.getEmailAddress());
}
}catch (Exception e){
userLinkedInData.setmEmailAddress(AppConstants.sNotAvailable);
}
try {
if (!p.getFirstName().isEmpty()) {
userLinkedInData.setmFirstName(p.getFirstName());
} else {
userLinkedInData.setmFirstName(AppConstants.sNotAvailable);
}
}catch (Exception e){
userLinkedInData.setmFirstName(AppConstants.sNotAvailable);
}
}
}
});
mProgressDialog.dismiss();
}
Все зависимости баночка:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
compile project(':linkedin-sdk')
compile files('libs/linkedin-j-android.jar')
compile files('libs/commons-codec-1.3.jar')
compile files('libs/signpost-core-1.2.1.1.jar')
compile files('libs/signpost-commonshttp4-1.2.1.2.jar')
compile files('libs/signpost-jetty6-1.2.1.1.jar')
compile 'com.github.bumptech.glide:glide:3.5.2'
compile 'com.android.support:support-v4:22.0.0'
compile 'com.googlecode.libphonenumber:libphonenumber:7.0.4'
compile "com.google.android.gms:play-services:8.1.0"
compile 'org.apache.directory.studio:org.apache.commons.io:2.4'
compile 'com.android.support:multidex:1.0.0'}
Exception я получаю на первый клик:
W/System.err﹕ java.lang.ExceptionInInitializerError
W/System.err﹕ at com.google.code.linkedinapi.client.oauth.LinkedInOAuthServiceImpl.getOAuthProvider(LinkedInOAuthServiceImpl.java:230)
W/System.err﹕ at com.google.code.linkedinapi.client.oauth.LinkedInOAuthServiceImpl.getOAuthRequestToken(LinkedInOAuthServiceImpl.java:170)
W/System.err﹕ at com.app.util.LinkedinDialog.setWebView(LinkedinDialog.java:64)
W/System.err﹕ at com.app.util.LinkedinDialog.onCreate(LinkedinDialog.java:51)
W/System.err﹕ at android.app.Dialog.dispatchOnCreate(Dialog.java:373)
W/System.err﹕ at android.app.Dialog.show(Dialog.java:274)
W/System.err﹕ at com.app.circles.LoginActivity.linkedInLogin(LoginActivity.java:228)
W/System.err﹕ at com.app.circles.LoginActivity.access$100(LoginActivity.java:72)
W/System.err﹕ at com.app.circles.LoginActivity$1.onClick(LoginActivity.java:158)
и Затем я нажимаю кнопку назад, чтобы войти в систему снова, то получает новое исключение, как это:
W/System.err﹕ java.lang.NoClassDefFoundError: com.google.code.linkedinapi.client.constant.LinkedInApiUrls
Есть ли вероятность, что вы можете опубликовать журнал ошибок или stacktrace? – jagmohan
@jagmohan, пожалуйста, уточните мой обновленный вопрос –
Я решил эту проблему самостоятельно ... я только очищаю оболочку сборки, тогда я удалил существующие файлы jar linkedin, например linkedin-j, signpost-core, commons-codec и снова импортировал те же файлы затем построить проект ... теперь он работает хорошо. –