我目前正在使用c ++书中的一些练习,该书使用基于文本的游戏作为其教学工具.我坚持的练习涉及让电脑从const数组(字符串)中选择一个单词,将字母混合起来并要求玩家猜出单词.这很容易,但是随后本书要求添加选项以向玩家提供提示以帮助他们猜测,首先作为并行数组(再次,没问题)然后作为二维数组.这就是我被困住的地方.我的(缩短的)单词数组如下:
const string WORDS[NUM_WORDS] = {"wall", "glasses"};
Run Code Online (Sandbox Code Playgroud)
我需要提供每个单词的提示,但不知道如何去做.从手机发布这么广泛的谷歌搜索不是一个选项!
我的并行数组如下:
const string HINTS[NUM_WORDS] = "brick...", "worn on head"};
Run Code Online (Sandbox Code Playgroud)
只需要将两者结合起来.
先谢谢你,巴里
我有一个使用SQL数据库的应用程序.这是由SQLiteOpenHelper类封装的.启动启动画面时,它会在DataProvider类上调用init,该类存储SQLiteOpenHelper的受保护静态实例.init只是调用SQLiteOpenHelper的构造函数:
public class UKMPGData extends SQLiteOpenHelper
{
public UKMPGData(Context context, String databaseName)
{
super(context, databaseName, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
//create table and set up triggers etc
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
onCreate(db);
}
}
public class UKMPGDataProvider
{
protected static UKMPGData uKMpgData;
public static void init(Context aApplicationContext, String aDatabaseName)
{
uKMpgData = new UKMPGData(applicationContext, databaseName);
}
public static void close()
{
uKMpgData.close();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我又有两个扩展UKMPGDataProvider的类,因此可以访问uKMpgData.这些类从数据库中检索和存储特定类型的数据.例如.
public class VehicleDataProvider extends …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,它使用AlarmManager来安排用户通知的警报.我将Alarm对象的实例传递给AlarmManager使用的PendingIntent:
public void scheduleAlarms(List<Alarm> alarms)
{
for (Alarm alarm : alarms)
{
Log.d(Constants.EVERY_OTHER_ALARM_APP_LOG_TAG,
"Setting alarm for: " + new Date(alarm.getTime()).toString() +
" with an interval of " +
IntervalEnumStringProvider.getIntervalStringInGivenFormat(
alarm.getInterval(),
true));
PendingIntent alarmScheduledPending = createPendingIntent(alarm);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
alarm.getTime(),
(alarm.getInterval() * Constants.ONE_SECOND_IN_MILLIS),
alarmScheduledPending);
}
}
private PendingIntent createPendingIntent(Alarm alarm)
{
alarmBroadcastReceiverIntent = new Intent(context, AlarmBroadcastReceiver.class);
alarmBroadcastReceiverIntent.putExtra(Constants.SCHEDULED_ALARM_TAG, alarm);
return PendingIntent.getBroadcast(context,
alarm.getIdForPendingIntent(),
alarmBroadcastReceiverIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
}
Run Code Online (Sandbox Code Playgroud)
当闹钟时间发生时,我的AlarmBroadcastReceiver班级正确接收广播,但LogCat警告未找到Alarm类:
06-29 08:30:00.084: W/Intent(66): Failure filling in extras
06-29 08:30:00.084: W/Intent(66): java.lang.RuntimeException: Parcelable encounteredClassNotFoundException reading a Serializable …Run Code Online (Sandbox Code Playgroud) serialization android broadcastreceiver alarmmanager android-intent
我有一个应用程序,根据Sim对象的状态引发事件.特别是,如果Sim的状态发生变化 - 即从PinRequired变为Accessible - 将引发OnStatus事件.事件在新线程上通知侦听器.
我在我的单元测试中使用Moq并且能够断言OnStatus是这样引发的:
[Test]
public void TestOnStatusIsRaised()
{
Sim sim = new Sim();
sim.OnStatus += OnStatus;
lock (this)
{
sim.UpdateSimInfo(new Info("a new status"));
Monitor.Wait(this);
}
Assert.IsTrue(_onStatusCalled);
}
private void OnStatus(SimStatus obj)
{
lock (this)
{
_onStatusCalled = true;
Monitor.Pulse(this);
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,使用Monitor类我可以等到事件被引发,然后继续并断言_onStatusCalled标志已设置为true.
当我想断言事件没有被提出时,我的困难就出现了.我不能使用Monitor来等待事件不被提出,因为测试会永远等待!我可以在等待中添加超时,但这似乎是一个肮脏的黑客.
我尝试过以下方法:
[Test]
public void TestOnStatusIsNotFired()
{
Sim sim = new Sim();
sim.OnStatus += onStatus => Assert.Fail("OnStatus Was called");
sim.UpdateSimInfo(new Info("the same status"));
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用 - 在修复代码以确保不引发事件之前,测试总是通过.我甚至已经逐步完成了代码并观察到了异常被抛出Assert.Fail(),但是这不会导致测试失败,因为我的事件在try/catch块中引发并且捕获了NUnit异常.
有任何想法吗?
我一直在组装一个简单的Android ListView应用程序来自学LoaderManagers和Loaders.该应用程序只提供一个Loader,当共享首选项发生更改时,通过OnSharedPreferenceChangeListener通知该Loader.
它有一个简单的UI,带有ListView和两个按钮,一个用于添加首选项,另一个用于删除所有共享首选项.
我的活动是ListActivity的子类,并实现了LoaderManager.LoaderCallbacks>.
当共享首选项发生更改时,我的Loader会简单地通知活动.
我的问题是,当单击"删除所有首选项"按钮时,不会通知OnSharedPreferenceChangeListener,而添加首选项会通知它.即使未通知侦听器,也会删除首选项,因为随后单击"添加首选项"按钮会更新列表以显示单个列表条目.
这是代码(为简洁省略了位):
MainActivity.java
public class MainActivity extends ListActivity implements LoaderManager.LoaderCallbacks<List<String>>
{
private ListView listView;
private static final int LOADER_ID = 1;
private LoaderManager.LoaderCallbacks<List<String>> mCallbacks;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setUpLoaderManager();
ArrayList<String> values = new ArrayList<String>();
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values);
listView = (ListView) findViewById(android.R.id.list);
listView.setAdapter(adapter);
}
private void setUpLoaderManager()
{
mCallbacks = this;
LoaderManager lm = getLoaderManager();
lm.initLoader(LOADER_ID, null, mCallbacks);
}
@Override
public void onLoadFinished(Loader<List<String>> …Run Code Online (Sandbox Code Playgroud) 我有一个带有两个复选框的PreferenceActivity.一切正常,但我有UI问题; 并非所有复选框的文本都适合复选框行.
有没有一种很好的方法来设置这些复选框首选项的最小高度而不硬编码值?
编辑 - 添加xml:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="alarm_set"
android:title="@string/set_alarm_title"
android:defaultValue="true" />
<CheckBoxPreference
android:key="store_pages"
android:title="@string/store_downloaded_pages_title"
android:summary="@string/store_downloaded_pages"
android:defaultValue="false" />
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud) 我正在尝试从单个MS SQL Server表中提取数据,该表使用nvarchar(MAX)作为几列的数据类型,并将其插入到使用整数作为相应nvarchar(MAX)数据的数据类型的表中.我有几个表(查找表?)来提供int值.
表格具有以下设计:
MobileClientTable(源表)
LookupWeather
LookupArea
destinationTable会
一些样本数据:
MobileClientTable
LookupWeather
LookupArea
所以我想要的是Destination表中的行,如下所示:
ID Area Weather Details
1 4 1 None
Run Code Online (Sandbox Code Playgroud)
其中区域和天气的4和1已从查找表中获得.
我的SQL有点生疏,但我已经设法得到这个SQL语句:
USE [ETLTest]
GO
INSERT INTO DestinationTable(ID, Area, Weather, Details) VALUES
(
(SELECT ID FROM dbo.MobileClientTable),
(SELECT ID FROM dbo.LookupArea WHERE Area = dbo.MobileClientTable.Area),
(SELECT ID FROM dbo.LookupWeather WHERE Weather = dbo.MobileClientTable.Weather,
(SELECT AnyOtherDetails FROM dbo.MobileClientTable)
);
Run Code Online (Sandbox Code Playgroud)
当然,语法不正确.我收到以下错误:
Msg 156, Level 15, State 1, Line 6
Incorrect syntax near the keyword 'SELECT'.
Msg 102, Level 15, State 1, …Run Code Online (Sandbox Code Playgroud) 使用Java,我有一个类,它将网页检索为字节数组.然后我需要删除一些内容(如果存在).(该应用程序监视网页的变化,但需要从PHP创建的html中删除会话ID,并且意味着每次访问该页面时都会检测到更改).
一些生成的字节数组可能是1000个字节长的10.它们不是这样存储的 - 存储了16字节的MD5页面.但是,它是需要处理的原始全尺寸字节数组.
(更新 - 代码不起作用.请参阅下面的AH评论)显示我的代码的测试:
public void testSessionIDGetsRemovedFromData() throws IOException
{
byte[] forumContent = "<li class=\"icon-logout\"><a href=\"./ucp.php?mode=logout&sid=3a4043284674572e35881e022c68fcd8\" title=\"Logout [ barry ]\" accesskey=\"x\">Logout [ barry ]</a></li>".getBytes();
byte[] sidPattern = "&sid=".getBytes();
int sidIndex = ArrayCleaner.getPatternIndex(forumContent, sidPattern);
assertEquals(54, sidIndex);
// start of cleaning code
ArrayList<Byte> forumContentList = new ArrayList<Byte>();
forumContentList.addAll(forumContent);
forumContentList.removeAll(Arrays.asList(sidPattern));
byte[] forumContentCleaned = new byte[forumContentList.size()];
for (int i = 0; i < forumContentCleaned.length; i++)
{
forumContentCleaned[i] = (byte)forumContentList.get(i);
}
//end of cleaning code
sidIndex = ArrayCleaner.getPatternIndex(forumContentCleaned, sidPattern);
assertEquals(-1, …Run Code Online (Sandbox Code Playgroud) android ×4
arrays ×2
alarmmanager ×1
arraylist ×1
c# ×1
c++ ×1
const ×1
events ×1
java ×1
lifecycle ×1
listview ×1
loader ×1
moq ×1
performance ×1
sql ×1
sql-server ×1
unit-testing ×1