Android的微博登录不工作与面料SDK - 回调不能为空 [英] Android Twitter login not working with Fabric SDK - Callback must not be null
问题描述
我工作的一个特点,需要通过Twitter的REST API来访问Twitter用户的公开数据,而我使用Twitter的面料SDK用于登录到Twitter的。这是我的活动
的code:
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
的setContentView(R.layout.fragment_twitter_settings);
}
@覆盖
保护无效onResume(){
super.onResume();
buttonAdd =(按钮)findViewById(R.id.add);
buttonLogin =(TwitterLoginButton)findViewById(R.id.login);
TwitterSession会话= Twitter.getSessionManager()getActiveSession()函数。
如果(会话== NULL)
{
登录();
}
其他
{
长的用户id = session.getUserId();
注销(用户ID);
}
}
@覆盖
公共无效onActivityResult(INT申请code,INT结果code,意图数据){
super.onActivityResult(要求code,因此code,数据);
btnLogin.onActivityResult(要求code,因此code,数据);
}
@覆盖
公共无效onBack pressed(){
super.onBack pressed();
overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_right);
}
私人无效的登录(){
buttonLogin.setText(登录);
buttonLogin.setOnClickListener(新OnClickListener(){
@覆盖
公共无效的onClick(视图v){
v.post(新的Runnable(){
@覆盖
公共无效的run(){
doLogin();
}
});
}
});
}
私人无效注销(长的用户id){
buttonLogin.setText(注销);
buttonLogin.setOnClickListener(新OnClickListener(){
@覆盖
公共无效的onClick(视图v){
v.post(新的Runnable(){
@覆盖
公共无效的run(){
doLogout();
}
});
}
});
}
私人无效doLogin(){
buttonLogin.setCallback(新回拨< TwitterSession>(){
@覆盖
公共无效的成功(结果< TwitterSession>的结果){
// ... 做一点事
}
@覆盖
公共无效失败(TwitterException除外){
// ... 做一点事
}
});
}
@燮pressLint(NewApi)
私人无效doLogout(){
AlertDialog alertDialog;
如果(Build.VERSION.SDK_INT> = Build.VERSION_ codeS.HONEYCOMB){
alertDialog =新AlertDialog.Builder(背景下,
AlertDialog.THEME_HOLO_LIGHT).create();
} 其他 {
alertDialog =新AlertDialog.Builder(上下文).create();
}
alertDialog.setTitle(注销);
alertDialog.setMessage(你确定吗?);
alertDialog.setIcon(R.drawable.twitter);
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE,OK,新DialogInterface.OnClickListener(){
@覆盖
公共无效的onClick(DialogInterface对话,诠释它){
。Twitter.getSessionManager()clearActiveSession();
}
});
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE,取消,新DialogInterface.OnClickListener(){
@覆盖
公共无效的onClick(DialogInterface对话,诠释它){
// TODO自动生成方法存根
dialog.cancel();
}
});
alertDialog.show();
}
下面所有的指令后这里,我不断收到以下当我点击异常 TwitterLoginButton
:
致命异常:主要
java.lang.IllegalArgumentException:如果回调不能为空。
在com.twitter.sdk.android.core.identity.TwitterAuthClient.authorize(TwitterAuthClient.java:67)
在com.twitter.sdk.android.core.identity.TwitterLoginButton$LoginClickListener.onClick(TwitterLoginButton.java:138)
在android.view.View.performClick(View.java:4438)
在android.view.View $ PerformClick.run(View.java:18422)
在android.os.Handler.handleCallback(Handler.java:733)
在android.os.Handler.dispatchMessage(Handler.java:95)
在android.os.Looper.loop(Looper.java:136)
在android.app.ActivityThread.main(ActivityThread.java:5017)
在java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
好了,我们做的最愚蠢的错误。该回调< TwitterSession>
对象需要设置之前,用户点击 TwitterLoginButton
。添加以下code到你的的onCreate()
或 onActivityCreated()
或 onResume ()
方法:
buttonLogin.setCallback(新回拨< TwitterSession>(){
@覆盖
公共无效的成功(结果< TwitterSession>的结果){
// ... 做一点事
}
@覆盖
公共无效失败(TwitterException除外){
// ... 做一点事
}
});
这个错误是,我已经把这个code在Twitter的按钮点击监听器,这是不对的自然。您需要后置的按钮被按下,没有的之前,回调的 的。如何愚蠢明显,如何痛苦地自我贬低!
I'm working on a feature that needs to access the public data of Twitter users through the Twitter REST API, and I'm using Twitter's Fabric SDK for logging into Twitter. Here is the code of my Activity
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.fragment_twitter_settings);
}
@Override
protected void onResume() {
super.onResume();
buttonAdd = (Button) findViewById(R.id.add);
buttonLogin = (TwitterLoginButton) findViewById(R.id.login);
TwitterSession session = Twitter.getSessionManager().getActiveSession();
if(session == null)
{
login();
}
else
{
long userid = session.getUserId();
logout(userid);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
btnLogin.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition( R.anim.slide_in_right, R.anim.slide_out_right);
}
private void login(){
buttonLogin.setText("Login");
buttonLogin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
v.post(new Runnable() {
@Override
public void run() {
doLogin();
}
});
}
});
}
private void logout(long userID){
buttonLogin.setText("Logout");
buttonLogin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
v.post(new Runnable() {
@Override
public void run() {
doLogout();
}
});
}
});
}
private void doLogin(){
buttonLogin.setCallback(new Callback<TwitterSession>() {
@Override
public void success(Result<TwitterSession> result) {
// ... do something
}
@Override
public void failure(TwitterException exception) {
// ... do something
}
});
}
@SuppressLint("NewApi")
private void doLogout(){
AlertDialog alertDialog;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
alertDialog = new AlertDialog.Builder(context,
AlertDialog.THEME_HOLO_LIGHT).create();
} else {
alertDialog = new AlertDialog.Builder(context).create();
}
alertDialog.setTitle("Logout");
alertDialog.setMessage("Are you sure ?");
alertDialog.setIcon(R.drawable.twitter);
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Twitter.getSessionManager().clearActiveSession();
}
});
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel();
}
});
alertDialog.show();
}
After following all the instructions here, I keep getting the following exception when I click on the TwitterLoginButton
:
FATAL EXCEPTION: main
java.lang.IllegalArgumentException: Callback must not be null.
at com.twitter.sdk.android.core.identity.TwitterAuthClient.authorize(TwitterAuthClient.java:67)
at com.twitter.sdk.android.core.identity.TwitterLoginButton$LoginClickListener.onClick(TwitterLoginButton.java:138)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
Well, we make the stupidest mistakes. The Callback<TwitterSession>
object needs to be set BEFORE the user clicks on the TwitterLoginButton
. Add the following code to your onCreate()
or onActivityCreated()
or onResume()
method:
buttonLogin.setCallback(new Callback<TwitterSession>() {
@Override
public void success(Result<TwitterSession> result) {
// ... do something
}
@Override
public void failure(TwitterException exception) {
// ... do something
}
});
The mistake was that I had put this code in the Twitter button click listener, which is wrong naturally. You need to set the callback before the button is clicked, not after. How stupidly obvious, and how painfully self-demeaning!
这篇关于Android的微博登录不工作与面料SDK - 回调不能为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!