2017-01-19 1 views
1

Я использую Twitter 4j, чтобы опубликовать твит на одной кнопке. Если пользователь отменит доступ к моему приложению, тогда его показ Ошибка в Logcat в фоновом режиме. Я хочу эту ошибку, и если эта ошибка наступит, появится моя другая кнопка скрытия приложения авторизации twitter. как мне это сделать, пожалуйста, помогите. Мне нужна эта ошибка, и если она существует, я хочу скрыть показать свои кнопки.Как сохранить переменную в AsyncTask в Android

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/* 
     } } } 

ответ

2

Вы можете сохранить exception в переменной и проверить его в 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 
      } 
     } 
    } 
} 
+0

Мне нужно, чтобы объявить мою в синхронизации класс аннотацию это нормально? Я не могу сделать doInBackground (Void ... params) как void, потому что мне нужна строка для обновления статуса !!! –

+0

Я не могу сделать этого человека, потому что абстрактный может создать экземпляр :( –

+0

это шаблон .... вы можете использовать свой класс тоже просто передать boolean в последнем параметре 'String, String, Boolean' – rafsanahmad007

Смежные вопросы