为了更好地学习android,我正在制作一个基本调查应用程序,其中有一个bug。
偶尔我会得到一个W/系统。犯错误﹕ 在主要活动中。surveyAvailable(MainActivity.java:40)
指向以下代码行:
button.setVisibility(View.GONE);
我以前多次使用setVigic
,从来没有任何问题。
这是一个函数,当用户第一次进入应用程序,并在完成调查以检查服务器并查看是否有其他调查可供用户使用时,会调用该函数:
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);
}
}
当调查不可用时,会记录适当的行-应用程序调查可用吗?false
和“我们点击这里”。但是按钮有时不会设置为View. GONE
,我看到了System. Err行。但是有时它工作正常,按钮的可见性确实会改变。知道如何修复这个问题吗?或者如何获得更多关于System. Err实际意思的信息?
编辑:
我发现通过在我的活动中设置按钮调查按钮,然后将按钮引用为this.survey按钮似乎可以让功能更符合我们的期望(例如,当我们调用
button.set可见性(视图。消失)
视图实际上是一致的消失
)。但是它仍然抛出系统。错误行,这让我犹豫事情是否正常工作。
编辑活动:
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元素。你可以通过调用应用程序来实现这一点。getInstance()。alertAvailability(_surveyAvailable)
在后台线程上。将其移动到AsyncTask的
onPostExecute
。
我使用javamail api发送邮件。首先,我尝试了gmail smtp服务器,一切正常。但现在我想使用自己的邮件服务器(通过cPanel)。但我的财产有问题。有人能帮我吗? 这是我的属性代码: 以下是cPanel的服务器信息: 用户名:blabllabla@blabla.com 密码:blablabla。 输出服务器:cpanel4.onofis.com SMTP:端口465 IMAP、POP
我在做一个简单的应用程序。它只是有一个弹出屏幕,内向,概览,然后是带有图像按钮的主页面图像按钮将意图模块与图像。 给出错误的XML: Java:
我是OSGi的新手。我正在Android上运行ApacheFelix。我已将系统包导出的系统包设置如下: 但是,当我尝试安装ConfigAdmin捆绑包时,它会给出一个BundleException: 当我导出组织时,为什么它缺少这个要求。奥斯基。版本1.6的系统包中的框架包。0? 我已通过以下操作检查系统属性设置是否正确: 也许这是我的一个简单错误。有人能帮我吗? 谢谢!
问题内容: 在android 4.0之前,您可以使用TYPE_SYSTEM_OVERLAY创建并覆盖任何应用程序,并通过FLAG_WATCH_OUTSIDE_TOUCH获取触摸…现在,在android 4中,您无法接收触摸。 基本上,这个想法就是遵循这个应用程序的,即 http://www.appbrain.com/app/smart- taskbar-%28sidebar%29/com.smar
7.2.2.Android系统资源 我们的程序都有自己的资源,Android系统也同样。Android系统中内置了许多图标、图像、音频等等各种资源文件。回想下,应用程序的资源文件都在/res/目录之下,要在XML中引用它们,只需填上地址即可;而引用系统资源,则需要为地址加一个前缀android:,比如@android:drawable/ic_menu_preferences。在Java中引用的话,
在我的应用程序中,我得到了android。操作系统。NetworkOnMainThreadException。我正在尝试从url获取图像,当时我遇到了这个异常。若我在2.2中运行应用程序,它可以正常工作,但若我在4.0中运行,就会出现异常。 我有错误 在这一行请帮我解决这个问题 我使用了AsyncTask 我在这行中遇到了错误: Logcat: