簡體   English   中英

Android System.Err是否支持setVisibility(View.GONE)?

[英]Android System.Err for setVisibility(View.GONE)?

我注意到為了更好地學習android而制作的基本調查應用程序中的錯誤。

有時,我W/System.err﹕ at MainActivity.surveyAvailable(MainActivity.java:40)上得到一個W/System.err﹕ at MainActivity.surveyAvailable(MainActivity.java:40)它指向以下代碼行:

button.setVisibility(View.GONE);

我之前已經使用過setVisibility多次,並且從未遇到任何問題。

這是該函數,當用戶首次進入應用程序時以及在完成調查以檢查服務器並查看是否還有其他調查可供用戶使用時調用此函數:

public void surveyAvailable(boolean surveyIsAvailable) {
        Log.d("MainActivity", "App survey is available? " + surveyIsAvailable );
        Button button = (Button)findViewById(R.id.takeSurveyButton);

        if (surveyIsAvailable) {
            button.setVisibility(View.VISIBLE);

            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    App.getInstance().showSurvey();
                }
            });
        } else {
            Log.d("MainActivity", "We hit here");
            button.setVisibility(View.GONE);

        }
    }

如果沒有調查,則會記錄相應的行- App survey is available? false App survey is available? false和“我們打到這里”。 但是然后有時按鈕沒有設置為View.GONE ,我看到了System.Err行。 但是有時它可以正常工作,並且按鈕的可見性確實發生了變化。 任何想法如何解決? 或者如何獲取有關System.Err實際含義的更多信息?

編輯:

我發現通過設置Button surveyButton;發現Button surveyButton; 在我的活動,然后引用按鈕this.surveyButton似乎變得功能更加沿着我們所期待的是什么工作線(例如,當我們調用button.setVisibility(View.GONE)的觀點實際上是一致GONE )。 但是它仍然拋出System.Err行,這讓我猶豫,事情是否正常進行。

編輯的活動:

public class MainActivity extends ActionBarActivity implements SurveyListener {
    Button surveyButton;

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

        this.surveyButton = (Button)findViewById(R.id.takeSurveyButton);
    }

    public void surveyAvailable(boolean surveyIsAvailable) {
        Log.d("MainActivity", "App survey is available? " + surveyIsAvailable );

        if (surveyIsAvailable) {
            this.surveyButton.setVisibility(View.VISIBLE);

            this.surveyButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    App.getInstance().showSurvey();
                }
            });
        } else {
            Log.d("MainActivity", "We hit here");
            this.surveyButton.setVisibility(View.GONE);

        }
    }

}

該活動實現了此類:

public abstract interface SurveyListener
{
    public abstract void surveyAvailable(boolean surveyAvailable);
}

用於檢查調查並調用“ surveyAvailable()”的主應用程序類:

public class App
{
    private static App _instance;
    private SurveyListener _eventsHandler;
    private String _apiKey = "";
    private String _appuserId = "";
    private String _surveyUrl = "";
    private Activity _parentContext;
    private Boolean _surveyAvailable;

    public static App initWithApiKeyAndListener(String apiKey, SurveyListener surveyEventsHandler) {
        if (_instance == null)
        {
            _instance = new App();
            _instance._parentContext = (Activity) surveyEventsHandler;
            _instance.setSurveyListener(surveyEventsHandler);
            _instance.setApiKey(apiKey);

            String appuserId = PreferenceManager.getDefaultSharedPreferences((Activity) _instance._eventsHandler).getString(tag, "no_appuser");
            if (appuserId == "no_appuser") {
                _instance._surveyAvailable = true;
                _instance.alertAvailability(true);
            } else {
                _instance.checkForCampaigns();
            }
        }

        return _instance;

    }

    private void alertAvailability(boolean surveyAvailable) {
        App.getInstance()._eventsHandler.surveyAvailable(surveyAvailable);
    }

    private void checkForCampaigns() {
        new CampaignCheck().execute();
    }

    public static App getInstance()
    {
        if (_instance == null)
        {
            _instance = new App();
        }
        return _instance;
    }

    public void donePushed()
    {
        App.getInstance().checkForCampaigns();
    }

    private class CampaignCheck extends AsyncTask<Void, Void, Void> {
        protected Void doInBackground(Void... params) {

            Boolean surveysAvailable = false;
            try {
                surveysAvailable = new AppuserConnection().checkCampaigns();
                App.getInstance()._surveyAvailable = surveysAvailable;
                App.getInstance().alertAvailability(_surveyAvailable);

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {

        }
    }
}

您不應從其他線程修改UI元素。 您可以通過調用App.getInstance().alertAvailability(_surveyAvailable); 在后台線程上。 將其移到AsyncTask的onPostExecute

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM