繁体   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