小编Geo*_*rge的帖子

为什么insertWithOnConflict(...,CONFLICT_IGNORE)返回-1(错误)?

我有一个SQLite表:

CREATE TABLE regions (_id INTEGER PRIMARY KEY, name TEXT, UNIQUE(name));
Run Code Online (Sandbox Code Playgroud)

还有一些Android代码:

Validate.notBlank(region);
ContentValues cv = new ContentValues();
cv.put(Columns.REGION_NAME, region);
long regionId = 
    db.insertWithOnConflict("regions", null, cv, SQLiteDatabase.CONFLICT_IGNORE);
Validate.isTrue(regionId > -1,
    "INSERT ON CONFLICT IGNORE returned -1 for region name '%s'", region);
Run Code Online (Sandbox Code Playgroud)

在重复行上insertWithOnConflict()返回-1,表示错误,然后Validate抛出:

INSERT ON CONFLICT IGNORE returned -1 for region name 'Overseas'
Run Code Online (Sandbox Code Playgroud)

ON冲突文档的SQLite(重点煤矿)规定:

当发生适用的约束冲突时,IGNORE解析算法会跳过包含约束违规的一行,并继续处理SQL语句的后续行,就像没有出错一样.包含约束违例的行之前和之后的其他行将正常插入或更新.使用IGNORE冲突解决算法时不会返回错误.

Android的insertWithOnConflict()文件规定:

如果输入参数'conflictAlgorithm'= CONFLICT_IGNORE则返回新插入行的行ID或现有行的主键,如果有任何错误,则返回-1

CONFLICT_REPLACE不是一个选项,因为替换行将更改其主键而不是仅返回现有键:

sqlite> INSERT INTO regions (name) VALUES ("Southern");
sqlite> INSERT INTO regions (name) VALUES ("Overseas");
sqlite> …
Run Code Online (Sandbox Code Playgroud)

android android-sqlite

22
推荐指数
1
解决办法
1万
查看次数

尽管有序列被索引,为什么我的SQL Server ORDER BY会变慢?

我有一个SQL查询(由LINQ to Entities生成),大致如下所示:

SELECT * FROM [mydb].[dbo].[employees]
JOIN [mydb].[dbo].[industry]
  ON jobs.industryId = industry.id
JOIN [mydb].[dbo].[state]
  ON jobs.stateId = state.id
JOIN [mydb].[dbo].[positionType]
  ON jobs.positionTypeId = positionType.id
JOIN [mydb].[dbo].[payPer]
  ON jobs.salaryPerId = payPer.id
JOIN [mydb].[dbo].[country]
  ON jobs.countryId = country.id
WHERE countryName = 'US'
ORDER BY startDatetime
Run Code Online (Sandbox Code Playgroud)

查询返回大约1200行,我认为这不是一个巨大的数额.不幸的是,它还需要大约16秒.如果没有ORDER BY,查询将花费<1秒.

我已经使用SQL Server Management Studio在startDatetime列上添加索引,并在"cityId,industryId,startDatetime,positionTypeId,payPerId,stateId"上使用聚簇索引(即我们在"作业"中使用的所有列JOIN和我们使用ORDER BY的列.)我已经在JOIN中使用的每个列上都有单独的索引.不幸的是,这并没有使查询更快.

我跑了一个showplan得到了:

   |--Nested Loops(Inner Join, OUTER REFERENCES:([mydb].[dbo].[jobs].[cityId]))
       |--Nested Loops(Inner Join, OUTER REFERENCES:([mydb].[dbo].[jobs].[stateId]))
       |    |--Nested Loops(Inner Join, OUTER REFERENCES:([mydb].[dbo].[jobs].[industryId]))
       |    |    |--Nested Loops(Inner Join, OUTER REFERENCES:([mydb].[dbo].[jobs].[positionTypeId]))
       |    |    |    |--Nested Loops(Inner …
Run Code Online (Sandbox Code Playgroud)

sql sql-server linq-to-entities sql-server-2005

16
推荐指数
2
解决办法
3万
查看次数

如何在asp:Repeater中改变我的ItemTemplate?

我有一个用户控件,用于显示搜索结果.显示的每个结果的HTML将根据显示的结果类型而变化:"联系人"以一种方式显示,"新闻文章"显示在另一种中,等等.大约有10种不同类型的结果都被标记出来当他们使用HTML时会有所不同 - 所以我需要大约10个不同的模板用于个别结果,我可以根据显示的当前项目进行选择.

我用a asp:Repeater来显示结果,但我不知道如何选择合适的模板asp:Repeater <ItemTemplate>.理想情况下,我希望ASP根据通过searchResultsRepeater.DataSource- 传入的对象类型选择合适的模板使用- 但不幸的是我不能使用switch on type(请参阅此博客条目,了解C#switch on type).但是,我可以通过枚举值来显示所显示的结果类型.

在后端C#代码,我有一个抽象内嵌SearchResult类,并且该类的孩子喜欢ContactSearchResult,NewsArticleSearchResultsearchResultsRepeater.DataSource将被绑定到List<SearchResult>.每个字段都SearchResult包含一个ResultListingType type字段,用于显示要显示的列表类型.

尝试1:在ASP本身内部使用控制流程

我的第一次尝试是这样的:

        <asp:Repeater ID="searchResultsRepeater" runat="server">
        <ItemTemplate>
        <div class="item">

        <% switch (DataBinder.Eval(Container.DataItem, "type")) { %>

        <% case ResultListingType.CONTACT: %>

            <p><%# DataBinder.Eval(Container.DataItem, "firstName") %></p>
            <p><%# DataBinder.Eval(Container.DataItem, "lastName") %></p>

            <% break; %>

        <% case ResultListingType.NEWS: %>

            <p><%# DataBinder.Eval(Container.DataItem, "newsHeadline") %></p>
            <p><%# DataBinder.Eval(Container.DataItem, "newsDate") %></p>

            <% break; %>

        <% …
Run Code Online (Sandbox Code Playgroud)

c# asp.net

13
推荐指数
1
解决办法
2万
查看次数

为什么我的片段onSaveInstanceState()不被调用?

我有一个片段,它有自己的状态(选定的按钮等).屏幕旋转时该状态丢失.

包含片段的活动在/ res/layout /中具有纵向布局,在/ res/layout-land /中具有几乎相同的横向布局.两种布局都包含这样的片段:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <fragment
        android:id="@+id/testFragment"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        class="au.com.x.y.TestFragment" />
...</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我一直在测试的片段类是:

public class TestFragment extends android.support.v4.app.Fragment {
    private static final String TAG = "TestFragment";
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i(TAG, "onCreate(): " + 
                (savedInstanceState != null ? "NOT NULL" : "NULL"));
    }
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.i(TAG, "onActivityCreated(): " + 
                (savedInstanceState != null ? "NOT NULL" : "NULL"));
    }
    public void onSaveInstanceState(Bundle state) {
        super.onSaveInstanceState(state);
        Log.i(TAG, "onSaveInstanceState()");
        state.putString("saved_thing", "some_value");
    } …
Run Code Online (Sandbox Code Playgroud)

android android-fragments actionbarsherlock

13
推荐指数
1
解决办法
2万
查看次数

我需要覆盖哪些主题属性才能更改对话框的蓝色突出显示颜色?

我有一个名为"greenhighlight"的主题 - 这个主题是使用Android Action Bar Style Generator生成的,并且继承自默认的ActionBarSherlock主题.除了将ActionBar底部的突出显示从蓝色更改为绿色外,该主题不执行任何操作.

为了主题我的所有活动,我只是这样做:

<application android:theme="@style/Theme.greenhighlight"...
Run Code Online (Sandbox Code Playgroud)

这非常适合活动(请注意ActionBar底部的绿色突出显示):

主题Android活动

但是,我难以将对话框与我的活动相匹配:

默认主题Android列表对话框

默认主题Android进度对话框

我的"greenhighlight_Dialog"主题定义为:

<style name="greenhighlight_Dialog" parent="@style/Theme.Sherlock.Dialog">
    <item name="android:progressBarStyleHorizontal">
        @style/greenhighlight_ProgressBar
    </item>
</style>
Run Code Online (Sandbox Code Playgroud)

我将继承默认的Sherlock对话框主题,并使用我生成的"greenhighlight"主题定义的进度条样式覆盖进度条 - 您可以在上面的屏幕截图中看到进度条是正确的绿色阴影.

要使用主题,我运行以下代码:

ContextThemeWrapper ctw = 
    new ContextThemeWrapper(this, R.style.greenhighlight_Dialog);
AlertDialog.Builder builder = new AlertDialog.Builder(ctw);
...
ProgressDialog pd = new ProgressDialog(this, R.style.greenhighlight_Dialog);
...
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道我需要覆盖哪些属性.我一直在寻找Styles和Themes doco 推荐的styles.xmlthemes.xml(它注意到"R.style引用,但是没有很好地记录并且没有完整地描述样式") - 但是那里在Theme.Dialog上定义了很多样式,我不确定我需要覆盖哪些样式才能获得我想要的更改.

我需要覆盖哪些属性才能使我的对话框具有绿色标题文本,标题下方的绿色高亮条以及选中列表项的绿色复选标记?

android android-theme

11
推荐指数
1
解决办法
1万
查看次数

如何在确定和不确定之间切换进度对话框?

我有一个AsyncTask来处理一个相当长时间运行的更新过程,我想要一个进度对话框,按顺序显示:

  1. "开始更新"(暂时更新)
  2. "下载更新"(没有进度条 - 我不知道在下载之前更新会有多大)
  3. "保存更新数据"(进度条为0-100%)
  4. "保存更新图像"(进度条为0-100%)
  5. "更新完成"(在对话框消失之前的短暂时间)

我在确定(进度条显示)和不确定(没有进度条)之间切换进度对话框时遇到问题.

我的AsyncTask中的代码如下:

private final ProgressDialog progressDialog;

public SynchronizeTask(Activity activity)
{
    progressDialog = new ProgressDialog(activity);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
}

protected void onPreExecute() {
    progressDialog.setMessage("Starting update...");
    progressDialog.setCancelable(false);
    progressDialog.show();
}

...lots of code here...

// all of these are set from doInBackground()
private String progressMsg;
private int progressTotal;
private int progressProgress;

protected void onProgressUpdate(Void... values) {
    progressDialog.setMessage(progressMsg);
    if (progressTotal > 0) {
        progressDialog.setIndeterminate(false);
        progressDialog.setMax(progressTotal);
        progressDialog.setProgress(progressProgress);
    } else {
        progressDialog.setIndeterminate(true);
        progressDialog.setMax(0);
        progressDialog.setProgress(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试切换确定setIndeterminate()- 这里的问题是进度对话框在对话框的底部显示"NaN"和"0%",即使在不确定模式中没有留下"条形". …

android

10
推荐指数
1
解决办法
2794
查看次数

Sitecore使用"302 found"将用户重定向到我的自定义404页面 - 这是合法的吗?

这更像是一个HTTP规范问题,而不是Sitecore问题.

我在Sitecore中设置了404错误页面:

<setting name="ItemNotFoundUrl" value="/404.aspx" />
Run Code Online (Sandbox Code Playgroud)

因此,当用户访问不存在的页面(例如www.example.com/xyz)时,他们会被重定向到我的自定义404页面(例如www.example.com/404.aspx).

Sitecore使用302执行重定向,如下面的Firebug屏幕截图所示:

302发现重定向到404文件未找到

这是一个问题吗?即Google和其他搜索引擎会将我的404页面编入网址www.example.com/xyz吗?有问题的网站最初设置为从404页面返回"200 OK"响应(不好!),因此搜索引擎一旦找到网站的链接断开,就会将网站编入索引404页面.

我假设因为302只是一个重定向,所以最终(自定义404)URL的状态代码将是任何客户端应该假定应用于初始(重定向)URL的状态代码.

如果这不是问题,那么规范的规范/文档是什么呢?

http sitecore sitecore6 http-status-code-404 http-status-code-302

7
推荐指数
2
解决办法
4624
查看次数

如何将超过3400字节的文本插入Tridion代理中的字段?

我有一个包含大量元数据字段的模式.我们希望能够通过Tridion API从代理中搜索基于该模式的组件,如:

using Tridion.ContentDelivery.DynamicContent.Query;
private static Criteria getSearchCriteria(
        string searchText,
        params BrokerConstants.MetadataField[] fields)
    var searchCriteria = new List<Criteria>();
    foreach (var f in fields)
    {
        var mkcText = new CustomMetaKeyCriteria(f.Name);
        var mvcText = new CustomMetaValueCriteria(
                mkcText, 
                "%" + searchText + "%",
                Criteria.Like);
        searchCriteria.Add(mvcText);
    }
    return new OrCriteria(searchCriteria.ToArray());
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,此工作正常:用户可以键入一些搜索文本,我们通过代理API将搜索文本传递给Tridion,Tridion会将返回与搜索文本匹配的组件.

但!如果我在任何组件的内容字段中添加了大量文本,则Tridion发布过程将在"部署"阶段失败:

阶段:部署处理阶段失败,无法部署组件[Component id = tcm:9-2617-16 title = xyz schema = tcm:9-2325-8],CustomMeta字段,StringValue,大于支持的3400字节大小!

我尝试将代理数据库的CUSTOM_META表中的KEY_STRING_VALUE列从nvarchar(3400)更改为nvarchar(MAX),但这似乎没有解决问题.

我完全没有超出限制:"wc"告诉我文本中有4037个字节.大约6000左右听起来像是我需要的舒适上限.

是否有一种简单的方法来增加此字段中允许的文本字节数?

tridion tridion-content-delivery tridion-2011

7
推荐指数
2
解决办法
159
查看次数

如何在多个用户控件之间共享数据?

我有3个用户控件,每个用户控件都需要根据各种URL参数等从XML提要中提取数据.现在,此XML Feed中的数据对于所有3个用户控件都是相同的,因为它们都发送相同的请求.

对于相同的数据做出3个单独的请求似乎很愚蠢.

我的想法是有一个我将调用的单例,它将向XML服务发出一个请求,然后将精确解析的结果呈现给用户控件.

即:

  1. 用户控制A抓取单身人士.
  2. 用户控制A要求单身人士发出请求......
  3. Singleton发出请求并将XML解析为各种属性.
  4. 用户控件C抓取单例并将其数据拉出.
  5. 用户控件A将其数据从单例中拉出.
  6. 用户控件B抓取单例并将其数据拉出.

现在我考虑一下,我需要为"make a request"方法添加一些阻塞,这样我就不会多次同时调用它 - 我对C#很新,最简单的方法是什么做这个?用户控件是否同时运行?这个地方有一个很好的概述吗?

问题是"在C#中的页面请求之间是否会重新实现单例?",但我想一个更普遍的问题是"我做的很傻","最好的方法是什么?" 或"有更简单的方法来做我想要的吗?".

c# asp.net

3
推荐指数
1
解决办法
2166
查看次数

如何提高GridView渲染许多大图像的性能(首次加载时间,滚动平滑度)?

我的应用程序允许用户使用他们的设备相机应用程序拍摄照片,这些照片应用程序将保存到特定应用程

然后,用户可以选择将他们选择的任何图像发送到他们的某个联系人,使用他们选择的设备电子邮件应用.

可悲的是,"选择要发送的图像"对话框最初需要很长时间才能加载,并且在滚动时非常"不稳定"(频繁显着的暂停).我怀疑这是因为图像非常大 - 用我的相机拍摄的照片大约是每个2.3MB.因此,初始屏幕(显示15个图像)需要在磁盘可以渲染之前将其拉出34.5MB左右.

GridView layout.xml

<!-- ... -->
<GridView
android:id="@+id/gvSelectImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:numColumns="3"
android:gravity="center" />
<!-- ... -->
Run Code Online (Sandbox Code Playgroud)

适配器getView()

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    File pic = pics[position];
    View checkedImageView = 
      LayoutInflater.from(context).inflate(R.layout.checked_image, 
                                           parent, false);
    final ImageView imageView = 
      (ImageView) checkedImageView.findViewById(R.id.checkableImage);

    /* LOAD IMAGE TO DISPLAY */
    //imageView.setImageURI(pic.toURI())); // "exceeds VM budget"
    Bitmap image;
    try {
        int imageWidth = 100;
        image = getBitmapFromFile(pic, imageWidth); // TODO: slooow...
    } catch (IOException e) { …
Run Code Online (Sandbox Code Playgroud)

performance android

3
推荐指数
1
解决办法
2372
查看次数