我尝试将表单EF 3.5迁移到6(使用SQLite作为数据库).我们无法在app配置文件中设置连接字符串(这对ef6没有问题).我们必须在运行时以编程方式设置连接字符串(在用户选择SQLite文件之后).
这是我们的app.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="testContext" connectionString="data source=Data\testdb.sqlite;Foreign Keys=True"
providerName="System.Data.SQLite" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<remove invariant="System.Data.SQLite.EF6" />
<add name="System.Data.SQLite" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
</DbProviderFactories> …Run Code Online (Sandbox Code Playgroud) 我在SQLite的报告中有一个简单的SQL来计算周数
SELECT STRFTIME('%W', 'date_column')
Run Code Online (Sandbox Code Playgroud)
对于2009-2012非常正确.在2013年,我总是错误的周数.
例如
SELECT STRFTIME('%W', '2012-02-28')
Run Code Online (Sandbox Code Playgroud)
返回'09',这是正确的.
SELECT STRFTIME('%W', '2013-02-28')
Run Code Online (Sandbox Code Playgroud)
返回'08',这是错误的.我们有第9周.
SQLite日期时间函数中有什么我不明白的东西吗?或者它是SQLite的错误?
我的片段中有以下自己的接口实现:
@Override
public void onReportChanged(Fragment sender, long id, int position) {
// Views ein und ausblenden
_List.setVisibility(View.GONE);
_OnLoading.setVisibility(View.VISIBLE);
_NoDataView.setVisibility(View.GONE);
_ReportId = id;
getLoaderManager().restartLoader(_LM_REPORTS, null, this);
};
Run Code Online (Sandbox Code Playgroud)
FragmentActivity向此片段报告,另一个片段(选择列表)已选择一个项目.之后,ListFragment应加载具有报告ID(_ReportId)的新数据.
但是NullPoinerException在进入onCreateLoader-Method之前我会使用这段代码.这是LogCat:
05-28 14:24:37.905: E/AndroidRuntime(1775): FATAL EXCEPTION: main
05-28 14:24:37.905: E/AndroidRuntime(1775): java.lang.NullPointerException
05-28 14:24:37.905: E/AndroidRuntime(1775): at android.support.v4.app.LoaderManagerImpl.restartLoader(LoaderManager.java:637)
05-28 14:24:37.905: E/AndroidRuntime(1775): at de.webducer.android.worktime.beta.ui.fragment.ReportListFragment.onReportChanged(ReportListFra gment.java:142)
05-28 14:24:37.905: E/AndroidRuntime(1775): at de.webducer.android.worktime.beta.ui.ReportListActivity.onReportSelected(ReportListActivity.java:97)
05-28 14:24:37.905: E/AndroidRuntime(1775): at de.webducer.android.worktime.beta.ui.fragment.ReportSelectorSpinnerFragment$1.onItemSelected(ReportSelectorSpinnerFragment.java:78)
05-28 14:24:37.905: E/AndroidRuntime(1775): at android.widget.AdapterView.fireOnSelected(AdapterView.java:882)
05-28 14:24:37.905: E/AndroidRuntime(1775): at android.widget.AdapterView.access$200(AdapterView.java:48)
05-28 14:24:37.905: E/AndroidRuntime(1775): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:848)
05-28 14:24:37.905: E/AndroidRuntime(1775): at …Run Code Online (Sandbox Code Playgroud) 我希望在下面有类似的东西(例如我将如何在C#中执行此操作),从SQLiteDB获取类型化的值:
private T GetValueFromDB<T>(String colName) {
object returnValue = null;
switch (typeof(T)) {
case Boolean:
returnValue = dbData.getInt(colName) == 1;
break;
case Int32:
returnValue = dbData.getInt(colName);
break;
case Int64:
returnValue = dbData.getLong(colName);
break;
case String:
returnValue = dbData.getString(colName);
break;
}
return (T)returnValue;
}
Run Code Online (Sandbox Code Playgroud)
是否有可能(使用switch case或if else)在Java中实现它?
我在布局上有一些微调器,并使用加载程序在后台从db加载数据。问题在于,空的微调框的高度较小,直到加载数据为止。所以布局跳了起来。
如何防止这种跳跃?
编辑(添加了微调器行布局)
微调器行:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/Text1"
style="@style/StyleSpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)
微调框下拉行:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/style_spinner_row_padding" >
<TextView
android:id="@+id/Text1"
style="@style/StyleSpinnerDropDownRow1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" />
<TextView
android:id="@+id/Text2"
style="@style/StyleSpinnerDropDownRow2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/Text1" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
分配的样式:
<!-- // Spinner // -->
<style name="StyleSpinner" parent="AppTheme">
<item name="android:textStyle">bold</item>
<item name="android:gravity">start</item>
<item name="android:textSize">@dimen/default_text_size_normal</item>
<item name="android:padding">@dimen/style_spinner_row_padding</item>
</style>
<style name="StyleSpinnerDropDownRow1" parent="AppTheme">
<item name="android:textStyle">bold</item>
<item name="android:textSize">@dimen/default_text_size_normal</item>
</style>
<style name="StyleSpinnerDropDownRow2" parent="AppTheme">
<item name="android:textStyle">normal</item>
<item name="android:textSize">@dimen/default_text_size_small</item>
</style>
Run Code Online (Sandbox Code Playgroud)
屏幕截图:

我想测试我的 Android 视图模型。特别是当 setter 应该通知更改或不通知时。
视图模型看起来像这样(具有更多可绑定的属性):
public class EditViewModel extends BaseObservable {
private String _comment;
@Bindable
public String getComment() {
return _comment;
}
public void setComment(String comment) {
if (_comment == null && comment == null) {
// No changes, both NULL
return;
}
if (_comment != null && comment != null && _comment.equals(comment)) {
//No changes, both equals
return;
}
_comment = comment;
// Notification of change
notifyPropertyChanged(BR.comment);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的 UnitTest 中,我注册了一个侦听器,以获取通知并使用以下类跟踪它们:
public class TestCounter {
private int …Run Code Online (Sandbox Code Playgroud) 我们目前正在将我们的Xamarin项目从PCL迁移到.Net Standard 2.0,也就是核心库项目格式.大多数事情都很好.我们在核心项目中使用resx文件进行本地化.这适用于iOS和Android.
在UWP上我得到null了值,如果我尝试访问字符串ressources
var buttonText = AppResources.Cancel; // => null
Run Code Online (Sandbox Code Playgroud)
相同代码的PCL版本运行良好.是否需要初始化?
在调试时,我可以看到资源管理器有一个nullResourceSet,但是_WinRTResourceManager已经填充.
我使用动作栏(原点android,而不是ABS)并将我的视图相对定位在根布局(RelativeLayout)上.为了计算屏幕上的相对位置,我使用了我的视图的getParent().getHeight()/ getParent().getWidth()方法.使用正常的ActionBar,它可以正常工作.我得到父母的真实高度(活动高度 - 动作栏高度,例如800px显示器上的690px).但是如果我使用该splitActionBarWhenNarrow选项并显示底栏,我得到父母的相同高度(例如,在800px屏幕上再次为690px).因此,我的一些以编程方式定位的视图位于底部操作栏下方.
如果没有动作条,我怎样才能获得父级的真实高度?
编辑:
我读onWindowFocusChanged了活动方法的父宽度和高度.