在非活动类中将回调方法结果传递给android活动类?

Ano*_*p M 6 java android

我需要创建twitter fabric可重用组件.我的第一步是允许通过简单地从类中调用方法来使用twitter登录.

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

import com.twitter.sdk.android.Twitter;
import com.twitter.sdk.android.core.Callback;
import com.twitter.sdk.android.core.Result;
import com.twitter.sdk.android.core.TwitterAuthConfig;
import com.twitter.sdk.android.core.TwitterAuthToken;
import com.twitter.sdk.android.core.TwitterException;
import com.twitter.sdk.android.core.TwitterSession;
import com.twitter.sdk.android.core.identity.TwitterAuthClient;
import com.twitter.sdk.android.core.models.Tweet;
import com.twitter.sdk.android.core.services.StatusesService;

import io.fabric.sdk.android.Fabric;


public class TwitterAuth {

private String CONSUMER_KEY;
private String CONSUMER_SECRET;
private Context context;
private TwitterAuthClient client;
private StatusesService service;

public TwitterAuth(Context context, String CONSUMER_KEY, String CONSUMER_SECRET) {
    this.CONSUMER_KEY = CONSUMER_KEY;
    this.CONSUMER_SECRET = CONSUMER_SECRET;
    this.context = context;
    configureKey();
}

public void configureKey() {
    TwitterAuthConfig authConfig = new TwitterAuthConfig(CONSUMER_KEY, CONSUMER_SECRET);
    Fabric.with(context, new Twitter(authConfig));
}

public void doLogin() {
    client = new TwitterAuthClient();
    client.authorize((Activity) context, new Callback<TwitterSession>() {
        @Override
        public void success(Result<TwitterSession> twitterSessionResult) {
            final TwitterSession session = Twitter.getSessionManager().getActiveSession();
            TwitterAuthToken authToken = session.getAuthToken();
            String token = authToken.token;
            String secret = authToken.secret;
            String userName = session.getUserName();
            Toast.makeText(context, "TWITTER EASY LIB TEST :: Done Login With \n Username :" + userName + " \n Token :" + token + "\n Secret :" + secret, Toast.LENGTH_LONG).show();
            //Toast.makeText(MainActivity.this, "success", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void failure(TwitterException e) {
            Toast.makeText(context, "TWITTER EASY LIB TEST :: failure", Toast.LENGTH_SHORT).show();
        }
    });
}


public void doLogout() {
    Twitter.getSessionManager().clearActiveSession();
}

public void publishTweet(String tweet) {
    service = Twitter.getInstance().getApiClient().getStatusesService();
    service.update(tweet, null, null, null, null, null, null, null, new Callback<Tweet>() {
        @Override
        public void success(Result<Tweet> tweetResult) {
            Toast.makeText(context, "Tweet Updated !",
                    Toast.LENGTH_SHORT).show();
        }

        @Override
        public void failure(TwitterException e) {
            Toast.makeText(context, "Error occured !",
                    Toast.LENGTH_SHORT).show();
        }
    });
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    client.onActivityResult(requestCode, resultCode, data);
}

}
Run Code Online (Sandbox Code Playgroud)

活动

package codelynks.twitter.twitterintegration;


import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;

import com.easytweet.TwitterAuth;

public class CheckLib extends ActionBarActivity {
private Button cus;
private TwitterAuth auth;
private String CONSUMER_KEY = "", CONSUMER_SECRET = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    auth = new TwitterAuth(CheckLib.this, CONSUMER_KEY, CONSUMER_SECRET);
    setContentView(R.layout.activity_main);
    cus = (Button) findViewById(R.id.cusbutton);
    cus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            auth.doLogin();
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    auth.onActivityResult(requestCode, resultCode, data);
}

@Override
protected void onResume() {
    super.onResume();
}

@Override
protected void onDestroy() {
    super.onDestroy();
}
 }
Run Code Online (Sandbox Code Playgroud)

这里我将得到回调方法的结果

   public void success(Result<TwitterSession> twitterSessionResult) {} 
                          **or**
           public void failure(TwitterException e) {}
Run Code Online (Sandbox Code Playgroud)

如何将此结果(SUCCESS/FAILURE)传递给活动CheckLib以执行进一步操作.

任何帮助,将不胜感激 :)

MHP*_*MHP 7

你可以设置监听器的成功或失败TwitterAuth.class,然后在你的activity(CheckLib.class)中设置这个监听器,以便在成功或失败时通知你,如下所示:

public class TwitterAuth {
private TwitterLoginListener listener;
public void setListener( TwitterLoginListener listener){
     this.listener = listener;    
}

Interfase TwitterLoginListener{
    public void success(Result<TwitterSession> twitterSessionResult);
    public void failure(TwitterException e);
} 
.
. 
.
Run Code Online (Sandbox Code Playgroud)

在成功和失败方法中,您需要填写监听器:

in success方法(在TwitterAuth.class中):

if(listener != null){
    listener.success(twitterSessionResult);
}  
Run Code Online (Sandbox Code Playgroud)

in failure方法(在TwitterAuth.class中):

if(listener != null){
    listener.failure(e);
} 
Run Code Online (Sandbox Code Playgroud)

然后在你的活动集听众中:

.
.
.

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
auth = new TwitterAuth(CheckLib.this, CONSUMER_KEY, CONSUMER_SECRET);
auth.setListener(new TwitterLoginListener{

     @Override
     public void success(Result<TwitterSession> twitterSessionResult){
        //login success
     }

     @Override
     public void failure(TwitterException e){
        //login failed
     }
}); 
.
.
.
Run Code Online (Sandbox Code Playgroud)