Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将非活动类中的回调方法结果传递给android活动类?_Java_Android - Fatal编程技术网

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

Java 将非活动类中的回调方法结果传递给android活动类?,java,android,Java,Android,我需要创建TwitterFabric可重用组件。我的第一步是通过从类调用方法来允许使用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.androi

我需要创建TwitterFabric可重用组件。我的第一步是通过从类调用方法来允许使用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);
}

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

   public void success(Result<TwitterSession> twitterSessionResult) {} 
                          **or**
           public void failure(TwitterException e) {}
public void成功(结果twitterSessionResult){}
**或**
公共无效失败(Twittere异常){}
如何将此结果(成功/失败)传递给activity CheckLib以执行进一步的操作


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

如果它是一种基本类型,如布尔值或字符串(好的,这不是基本类型,但仍然是),您可以将其作为附加类型传递给活动,并发送给活动


如果它是一个更复杂的对象,或者您的类中没有
上下文
访问权限,请尝试greenrobot EventBus,这是一个专为此类情况创建的非常酷的库。

您可以在
TwitterAuth.class
中设置侦听器的成功或失败,然后在活动中设置此侦听器(
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);
} 
.
. 
.
在失败方法中(在TwitterAuth.class中):

然后在活动集侦听器中:

.
.
.

@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
     }
}); 
.
.
.
。
.
.
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
auth=new TwitterAuth(CheckLib.this、CONSUMER\u KEY、CONSUMER\u SECRET);
auth.setListener(新TwitterLoginListener{
@凌驾
公共作废成功(结果twitterSessionResult){
//登录成功
}
@凌驾
公共无效失败(Twittere异常){
//登录失败
}
}); 
.
.
.
您可以使用interface并通过dologin方法实现interface方法
检查我的样品
公共接口采样接口{
//您可以根据需要定义任何参数
公共方法(布尔值);
}
公共void doLogin(样本接口si){
public void publishTweet(字符串tweet){
样本接口样本;
service=Twitter.getInstance().getApiClient().getStatuseService();
update(tweet,null,null,null,null,null,null,null,null,null,new Callback()){
@凌驾
公共作废成功(结果tweetResult){
Toast.makeText(上下文,“Tweet更新!”,
吐司。长度(短)。show();
你的方法(正确);
}
@凌驾
公共无效失败(Twittere异常){
Toast.makeText(上下文“出错!”,
吐司。长度(短)。show();
si.你的方法(错误);
}
});
}
}
在你的活动课里面
公共void onClick(视图v){
auth.doLogin(新的sampleInterface(){
@凌驾
公共方法(布尔值){
//得到你的结果
}
});
}

谢谢。是的,还有另一种方法,正如@Kelevandos所说的,你可以使用EventBus。如果你在谷歌上搜索,你可以找到好的图书馆。通过Bus你可以注册更多的课程(二、三、四等)并在事件发生时通知他们。如果此答案对您有帮助,您可以将此答案标记为已接受答案。当然,他们应该在总线上注册自己,并在完成工作后注销自己,总线的良好使用之一是在服务和活动回调中
if(listener != null){
    listener.success(twitterSessionResult);
}  
if(listener != null){
    listener.failure(e);
} 
.
.
.

@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
     }
}); 
.
.
.
   You can use interface  and implement  the interface method from your dologin method


    check my sample

    public interface sampleInterface {
        // you can define any parameter as per your requirement
        public void yourMethod(boolean value);
    }


    public void doLogin(sampleInterface si) {

          public void publishTweet(String tweet) {
           sampleInterface sampleIn;
        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();
            si.yourMethod(true);
            }

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


    inside your activity class

            public void onClick(View v) {
                auth.doLogin(new sampleInterface() {
                    @Override
                    public void yourMethod(boolean value) {
                        //GET your result
                    }
                });
            }