Twitter的登录对话框错误 [英] Twitter Login Dialog error
问题描述
在我的Android我已经将微博application.here问题是,当我尝试登录到它应该显示的第一次一个登录对话框中的微博,它是正确显示对话框,我能登录到Twitter帐户,但在我第二次尝试登录它显示一个空白的微博dialog.below是我的$ C $下TwitterDialog CALSS。我怎样才能解决这个issue.please给我一个解决方案。
公共类TwitterDialog扩展对话框{
静态最终浮动[] DIMENSIONS_LANDSCAPE = {460,260};
静态最终浮动[] DIMENSIONS_PORTRAIT = {280,420};
静态最终FrameLayout.LayoutParams FILL =新FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.FILL_PARENT);
静态最终诠释保证金= 4;
静态最终诠释PADDING = 2;
私人字符串mUrl;
私人TwDialogListener mListener;
私人ProgressDialog mSpinner;
私人的WebView mWebView;
私人的LinearLayout mContent;
私人TextView的mTitle;
私有静态最后字符串变量=Twitter的的WebView;
公共TwitterDialog(上下文的背景下,字符串URL,TwDialogListener监听器){
超(上下文);
mUrl =网址;
mListener =侦听器;
}
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
mSpinner =新ProgressDialog(的getContext());
mSpinner.requestWindowFeature(Window.FEATURE_NO_TITLE);
mSpinner.setMessage(载入中...);
mContent =新的LinearLayout(的getContext());
mContent.setOrientation(LinearLayout.VERTICAL);
setUpTitle();
setUpWebView();
显示显示= getWindow()getWindowManager()getDefaultDisplay()。
最终浮动规模=的getContext()getResources()getDisplayMetrics()密度。;
浮动[]尺寸=(display.getWidth()< display.getHeight())? DIMENSIONS_PORTRAIT:DIMENSIONS_LANDSCAPE; addContentView(mContent,新FrameLayout.LayoutParams((int)的(尺寸[0] *刻度+ 0.5F),(int)的(尺寸[1] *刻度+ 0.5F)));
}
私人无效setUpTitle(){
requestWindowFeature(Window.FEATURE_NO_TITLE);
可绘制图标=的getContext()getResources()getDrawable(R.drawable.twitter_icon)。
mTitle =新的TextView(的getContext());
mTitle.setText(推特);
mTitle.setTextColor(Color.WHITE);
mTitle.setTypeface(Typeface.DEFAULT_BOLD);
mTitle.setBackgroundColor(0xFFbbd7e9);
mTitle.setPadding(保证金+ PADDING,保证金,保证金,保证金);
mTitle.setCompoundDrawablePadding(保证金+填充);
mTitle.setCompoundDrawablesWithIntrinsicBounds(图标,NULL,NULL,NULL);
mContent.addView(mTitle);
}
私人无效setUpWebView(){
mWebView =新的WebView(的getContext());
mWebView.setVerticalScrollBarEnabled(假);
mWebView.setHorizontalScrollBarEnabled(假);
mWebView.setWebViewClient(新TwitterWebViewClient());
mWebView.getSettings()setJavaScriptEnabled(真)。
mWebView.loadUrl(mUrl);
mWebView.setLayoutParams(填);
//mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
mContent.addView(mWebView);
}
私有类TwitterWebViewClient扩展WebViewClient {
@覆盖
公共布尔shouldOverrideUrlLoading(web视图查看,字符串URL){
如果(Constants.LOG)Log.d(TAG,重定向URL+网址);
如果(url.startsWith(TwitterApp.CALLBACK_URL)){
mListener.onComplete(URL);
//mWebView.getSettings().setAppCacheEnabled(false);
//mWebView.refreshDrawableState();
如果(Constants.LOG)Log.d(TAG,清除chache);
TwitterDialog.this.dismiss();
返回true;
}否则,如果(url.startsWith(授权)){
返回false;
}
返回true;
}
@覆盖
公共无效onReceivedError(web视图来看,INT错误code,
字符串描述,字符串failingUrl){
如果(Constants.LOG)Log.d(TAG,页面错误:+说明);
super.onReceivedError(查看,错误code,说明,failingUrl);
mListener.onError(介绍);
TwitterDialog.this.dismiss();
}
@覆盖
公共无效onPageStarted(web视图查看,字符串URL,位图图标){
如果(Constants.LOG)Log.d(TAG,加载URL:+网址);
super.onPageStarted(查看,网址,网站图标);
mSpinner.show();
}
@覆盖
公共无效onPageFinished(web视图查看,字符串URL){
super.onPageFinished(查看,网址);
字符串标题= mWebView.getTitle();
如果(标题= NULL和放大器;!&安培; title.length()0){
mTitle.setText(职称);
}
mSpinner.dismiss();
}
}
}``
您需要强制登录第二次来解决这个问题,
所以,只要添加 force_login = TRUE 在你的Twitter授权的url。
我的意思只是改变了以下线code中的 TwitterApp.java 类(如果你有不同名称的类文件,然后在你的项目是 DefaultOAuthProvider )
mHttpOauthprovider =新DefaultOAuthProvider(http://twitter.com/oauth/request_token
http://twitter.com/oauth/access_token
http://twitter.com/oauth/authorize?force_login=true);
添加后的 force_login = TRUE 的WebView加载问题会解决,但每次需要输入用户名和密码的时间。
我被卡住了整整一天来解决这个问题。
Hi i have integrated twitter in my android application.here the problem is when i try to login to the twitter it should display a login dialog for the first time, it is displaying the dialog properly and i am able to login into twitter account,but at the second time i tried to login it displays a blank twitter dialog.below is my code for TwitterDialog calss. how can i resolve this issue.please give me a solution.
public class TwitterDialog extends Dialog {
static final float[] DIMENSIONS_LANDSCAPE = { 460, 260 };
static final float[] DIMENSIONS_PORTRAIT = { 280, 420 };
static final FrameLayout.LayoutParams FILL = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.FILL_PARENT);
static final int MARGIN = 4;
static final int PADDING = 2;
private String mUrl;
private TwDialogListener mListener;
private ProgressDialog mSpinner;
private WebView mWebView;
private LinearLayout mContent;
private TextView mTitle;
private static final String TAG = "Twitter-WebView";
public TwitterDialog(Context context, String url, TwDialogListener listener) {
super(context);
mUrl = url;
mListener = listener;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSpinner = new ProgressDialog(getContext());
mSpinner.requestWindowFeature(Window.FEATURE_NO_TITLE);
mSpinner.setMessage("Loading...");
mContent = new LinearLayout(getContext());
mContent.setOrientation(LinearLayout.VERTICAL);
setUpTitle();
setUpWebView();
Display display = getWindow().getWindowManager().getDefaultDisplay();
final float scale = getContext().getResources().getDisplayMetrics().density;
float[] dimensions = (display.getWidth() < display.getHeight()) ? DIMENSIONS_PORTRAIT: DIMENSIONS_LANDSCAPE;addContentView(mContent, new FrameLayout.LayoutParams((int) (dimensions[0] * scale + 0.5f), (int) (dimensions[1]* scale + 0.5f)));
}
private void setUpTitle() {
requestWindowFeature(Window.FEATURE_NO_TITLE);
Drawable icon = getContext().getResources().getDrawable(R.drawable.twitter_icon);
mTitle = new TextView(getContext());
mTitle.setText("Twitter");
mTitle.setTextColor(Color.WHITE);
mTitle.setTypeface(Typeface.DEFAULT_BOLD);
mTitle.setBackgroundColor(0xFFbbd7e9);
mTitle.setPadding(MARGIN + PADDING, MARGIN, MARGIN, MARGIN);
mTitle.setCompoundDrawablePadding(MARGIN + PADDING);
mTitle.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
mContent.addView(mTitle);
}
private void setUpWebView() {
mWebView = new WebView(getContext());
mWebView.setVerticalScrollBarEnabled(false);
mWebView.setHorizontalScrollBarEnabled(false);
mWebView.setWebViewClient(new TwitterWebViewClient());
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl(mUrl);
mWebView.setLayoutParams(FILL);
//mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
mContent.addView(mWebView);
}
private class TwitterWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Constants.LOG)Log.d(TAG, "Redirecting URL " + url);
if (url.startsWith(TwitterApp.CALLBACK_URL)) {
mListener.onComplete(url);
//mWebView.getSettings().setAppCacheEnabled(false);
//mWebView.refreshDrawableState();
if (Constants.LOG)Log.d(TAG, "Clearing chache");
TwitterDialog.this.dismiss();
return true;
} else if (url.startsWith("authorize")) {
return false;
}
return true;
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
if (Constants.LOG)Log.d(TAG, "Page error: " + description);
super.onReceivedError(view, errorCode, description, failingUrl);
mListener.onError(description);
TwitterDialog.this.dismiss();
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if(Constants.LOG)Log.d(TAG, "Loading URL: " + url);
super.onPageStarted(view, url, favicon);
mSpinner.show();
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
String title = mWebView.getTitle();
if (title != null && title.length() > 0) {
mTitle.setText(title);
}
mSpinner.dismiss();
}
}
}``
You need to force login second time to resolve this issue,
So just add the force_login=true in your twitter authorize url.
I mean just change the below line of code in TwitterApp.java class (if you have a class file with different name then search in your project with DefaultOAuthProvider)
mHttpOauthprovider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token",
"http://twitter.com/oauth/access_token",
"http://twitter.com/oauth/authorize?force_login=true");
after adding force_login=true webview loading issue will be resolve but every time you need to enter login and password.
I was stuck whole day to resolve this issue.
这篇关于Twitter的登录对话框错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!