首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >会话在每次应用程序打开时都需要登录后才会结束

会话在每次应用程序打开时都需要登录后才会结束
EN

Stack Overflow用户
提问于 2020-02-26 05:31:44
回答 1查看 80关注 0票数 0

Hi,

我正在使用库为Instagram开发一个应用程序。我有两个主要问题:

  • 每次应用程序打开时都需要登录。
  • 登录后,会话在切换活动中结束。

我不能只保存登录凭证就能解决这个问题,因为Instagram不允许这样做。我在Instagram平台策略中发现了这个:

“不要存储或缓存Instagram登录凭据”,

其他人也有同样的问题,库创建者回答了这。,问题是我什么也不懂,他用Kotlin回答,我使用Java。这里是我的代码:

Multiscreen.java:

代码语言:javascript
运行
复制
public class Multiscreen {

private Instagram4Android instagram;
private Context mContext;

public Multiscreen(Context mContext) {
    this.mContext = mContext;
}

public Observable<InstagramLoginResult> loginToIg(final String username, final String password) {

    Observable<InstagramLoginResult> observable = Observable.create(observableEmitter -> {

        instagram = Instagram4Android.builder().username(username).password(password).build();
        instagram.setup();
        observableEmitter.onNext(instagram.login());

    });



    return observable;

}

public Observable<InstagramUser> userInfo() {

    Observable<InstagramUser> observable = Observable.create(observableEmitter -> {

        InstagramSearchUsernameResult result = instagram.sendRequest(new InstagramSearchUsernameRequest(instagram.getUsername()));
        observableEmitter.onNext(result.getUser());

    });

    return observable;
}

public void isLoggedIn(){

    if (instagram == null){

        Toast.makeText(mContext, "null", Toast.LENGTH_SHORT).show();
    }

    else {

        Toast.makeText(mContext, "not null", Toast.LENGTH_SHORT).show();
    }
}}

LoginActivity:

代码语言:javascript
运行
复制
public class LoginActivity extends AppCompatActivity {

private Toolbar toolbar;

private EditText text_username, text_password;
private Button loginBtn;

private ProgressDialog dialog;

Instagram4Android instagram = Instagram4Android.builder().build();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    dialog = new ProgressDialog(LoginActivity.this);
    dialog.setTitle("Logging in...");

    toolbar = findViewById(R.id.loginToolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setTitle("");

    text_username = findViewById(R.id.usernameInput);
    text_password = findViewById(R.id.passwordInput);
    loginBtn = findViewById(R.id.loginBtn);

    loginBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (text_username.length() > 0 || text_password.length() > 0){

                String username = text_username.getText().toString();
                String password = text_password.getText().toString();

                dialog.show();

                instagram = Instagram4Android.builder().username(username).password(password).build();
                attemptToLogin(username, password);
            }

            else {

                Toast.makeText(LoginActivity.this, "All fields are required.", Toast.LENGTH_SHORT).show();
            }
        }
    });
}

public void attemptToLogin(String username, String password){

    Multiscreen multiscreen = new Multiscreen(getApplicationContext());
    multiscreen.loginToIg(username, password)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(instagramLoginResult -> {

                if (instagramLoginResult.getStatus().equals("ok")){

                    dialog.dismiss();
                    startActivity(new Intent(LoginActivity.this, MainActivity.class));
                }

                else {

                    dialog.dismiss();
                }
            });
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    int id = item.getItemId();

    if (id == android.R.id.home){
        onBackPressed();
    }

    return super.onOptionsItemSelected(item);
}

@Override
public void onBackPressed(){

    super.onBackPressed();
}}

我不知道是否有人能帮我,但我对此感到厌倦,我正在考虑放弃这个项目。如果你能至少解决其中一个问题,我将非常感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-26 06:21:50

你在每一页上都使用instagram凭证?

因为我认为您不能存储instagram凭据,但是您可以在prefrence is_login true中存储一个标志,您可以管理每个活动,也可以在每次应用程序打开时管理它。

我认为这可以解决您的问题,因为在所有的应用程序中,我们正在检查用户登录与否取决于存储在app缓存中的优先级。

MyApp类

代码语言:javascript
运行
复制
        public class MyApp extends Application {

            private static MyApp app;
            public static Instagram instaObject;

            @Override
            public void onCreate() {
                super.onCreate();
                app = this;


            }

            public static MyApp getApp() {
                return app;
            }

         public static void setInstagramObject(Instagram instaObject) {
                this.instaObject = instaObject;
            }

     public static Instagram getInstagramObject() {
                return instaObject;
            }

        }

在Android清单中定义MyApp类:-

代码语言:javascript
运行
复制
<application
        android:name=".MyApp"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true"
        tools:ignore="GoogleAppIndexingWarning"
        tools:targetApi="m">
//all activities
</application>    

登录活动

代码语言:javascript
运行
复制
    public void attemptToLogin(String username, String password){

        Multiscreen multiscreen = new Multiscreen(getApplicationContext());
        multiscreen.loginToIg(username, password)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(instagramLoginResult -> {

                    if (instagramLoginResult.getStatus().equals("ok")){

                        dialog.dismiss();
                        MyApp.setInstagramObject(instagramLoginResult);
                        startActivity(new Intent(LoginActivity.this, MainActivity.class));
                    }

                    else {

                        dialog.dismiss();
                    }
                });
    }

您想使用的Acvitity :-

代码语言:javascript
运行
复制
Instagram instaObject = MyApp.getInstagramObject();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60407363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档