android - 如何在Android中的AsyncTask中保存变量

标签 android android-asynctask twitter4j

我正在使用 Twitter 4j 在单个按钮上发布推文。如果用户撤销我的应用程序的访问权限,那么它会在后台执行的 Logcat 中显示错误,我希望出现此错误,如果此错误出现,我的 Twitter 授权应用程序的另一个隐藏按钮可见。我该怎么做,请帮忙。我需要该错误,如果它存在,我想隐藏显示我的按钮。

 class updateTwitterStatus extends AsyncTask<String, String, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    protected Void doInBackground(String... args) {

        String status = args[0];
        try {
            ConfigurationBuilder builder = new ConfigurationBuilder();
            builder.setOAuthConsumerKey(consumerKey);
            builder.setOAuthConsumerSecret(consumerSecret);

            String access_token = mSharedPreferences.getString(PREF_KEY_OAUTH_TOKEN, "");

            String access_token_secret = mSharedPreferences.getString(PREF_KEY_OAUTH_SECRET, "");


            AccessToken accessToken = new AccessToken(access_token, access_token_secret);
            twitter4j.Twitter twitter = new TwitterFactory(builder.build()).getInstance(accessToken);

            StatusUpdate statusUpdate = new StatusUpdate(status);

            File extStore = Environment.getExternalStoragePublicDirectory("/Twitter/Cache/demo.jpg");
            statusUpdate.setMedia(extStore);

            twitter4j.Status response = twitter.updateStatus(statusUpdate);

        } catch (TwitterException e) {
            Log.d("Failed to post!", e.getMessage());

            error=e; //error is exception
        }
        return null;}

    @Override
    protected void onPostExecute(Void result) {
       pDialog.dismiss();

       Toast.makeText(getContext(), "Posted to Twitter!"+error, Toast.LENGTH_SHORT).show();
    /* i need a variable like int a =10; access it globally, How i do that/*
       } } }

最佳答案

您可以将异常保存在变量中,并在onPostExecute()中检查它 并隐藏你的按钮..

    new AsyncTask<Void, Void, Boolean>() {
    Exception error;

    @Override
    protected Boolean doInBackground(Void... params) {
        try {
             // do work
             return true;
        } catch (Exception e) {
            error = e;

            return false;
        } 
    }

    @Override
    protected void onPostExecute(Boolean result) {
        if (result) {
            Toast.makeText(ctx, "Success!",
                Toast.LENGTH_SHORT).show();
         } else {
            if (error != null) {
                Toast.makeText(getApplicationContext(), error.getMessage(),
                        Toast.LENGTH_SHORT).show();
                //error occurs hide button here
            }
        }
    }
}

关于android - 如何在Android中的AsyncTask中保存变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41736158/

相关文章:

java - BitmapFactory.decodeByteArray() 返回 NULL

java - SQLiteDatabase.rawQuery 不使用准备好的语句返回正确的结果

android - 如何使用 AppCompat 更改 ActionBar 的操作文本颜色

java - 带有来自原始资源的自定义铃声的 RingtonePreference

java - AsyncTask 不显示 onPreExecute

android.content.Context 与 android.app.Activity

android - Twitter 不会重定向到 Android 应用程序 - Twitter4J

java - 使用 TwitterUtils 过滤掉用户

php - Android与php和mysql的连接返回空结果

java - Android - twitter4j Proguard 错误