小编Jon*_*lis的帖子

android上的非活动InputConnection警告的getExtractedText

我在logcat中收到以下警告.

getExtractedText on inactive InputConnection
Run Code Online (Sandbox Code Playgroud)

我无法找到背后的原因.请帮忙

java android logcat

120
推荐指数
4
解决办法
7万
查看次数

Log4Net - 如何添加仅用于特定代码段的第二个记录器

我正在使用Log4Net 2.0,我根据需要工作,但是为特定的日志语句添加另一个记录器.所有日志记录都是针对单个文件追加器完成的.我想要做的更改是第三方应用程序触发包含调试/错误信息的事件,我可以捕获这些信息,虽然有用但我觉得它污染了正常的应用程序日志文件,而是宁愿将它存储在自己的日志中文件.

我想要的最终结果是一个名为log-file.txt来自应用程序的所有日志记录的文件,除了第三方日志记录.并且第二个文件log-file-3rdparty.txt仅使用第三方应用程序进行日志记录.我的问题是设置Log4Net有2个单独的记录器.我已经尝试创建第二个LogFileAppender并将其添加到root,但是所有这一切都将相同的日志记录语句放入两个记录器中.

在整个应用程序中,我们目前拥有GetLogger语句,如下所示.理想情况下,这需要保持不变,因此现有的日志记录不会改变.我需要一个不受此语句影响的新记录器,而是纯粹为第三方记录实例化.

private readonly ILog _log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

而App.Config如下.

< log4net>
<logger name="MyApp.Logging">
  <level value="DEBUG"/>
</logger>

<root>
  <level value="ALL" />
  <appender-ref ref="LogFileAppender" />
</root>

<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
  <param name="File" value="log-file.txt" />
  <param name="AppendToFile" value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <param name="Header" value="&#13;&#10;[Application started]&#13;&#10;" />
    <param name="Footer" value="[Application Finished]&#13;&#10;"/>
    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
  </layout>
</appender>
</ log4net>
Run Code Online (Sandbox Code Playgroud)

你能帮我吗?

编辑

如果它有任何区别.第三方日志事件捕获在同一个类中,我的一些应用程序日志事件也被触发,这是因为该类负责控制第三方软件.这是一个问题吗?我确实有一些想法,log4net可以区分基于类名创建的记录器,如果是这样的话,我是否需要重构第三方记录到自己的类?

.net c# logging log4net visual-studio-2010

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

WPF MVVM - 简单登录到应用程序

我正在继续学习WPF,目前专注于MVVM并使用Karl Shifflett的"MVVM In a Box"教程.但是有一个关于在views/viewmodels之间共享数据以及它如何在屏幕上更新视图的问题.ps我还没有报道过IOC.

下面是我在测试应用程序中的MainWindow的屏幕截图.它分为3个部分(视图),一个标题,一个带按钮的滑动面板,其余部分作为应用程序的主视图.应用程序的目的很简单,登录到应用程序.在成功登录后,登录视图应该被新视图(即OverviewScreenView)替换,并且应用程序幻灯片上的相关按钮应该可见.

主窗口

我认为应用程序有2个ViewModel.一个用于MainWindowView,另一个用于LoginView,因为MainWindow不需要具有Login命令,所以我将它保持独立.

由于我还没有介绍过IOC,我创建了一个LoginModel类,它是一个单例.它只包含一个属性"public bool LoggedIn",以及一个名为UserLoggedIn的事件.

MainWindowViewModel构造函数注册到事件UserLoggedIn.现在在LoginView中,当用户在LoginView上单击Login时,它会在LoginViewModel上引发一个命令,如果正确输入了用户名和密码,则会调用LoginModel并将LoggedIn设置为true.这会导致UserLoggedIn事件触发,这将在MainWindowViewModel中处理,以使视图隐藏LoginView并将其替换为不同的视图,即概览屏幕.

问题

Q1.明显的问题,就是这样登录正确使用MVVM.即控制流程如下.LoginView - > LoginViewViewModel - > LoginModel - > MainWindowViewModel - > MainWindowView.

Q2.假设用户已登录,并且MainWindowViewModel已处理该事件.您将如何创建新视图并将其放在LoginView所在的位置,同样如何在不需要时处理LoginView.MainWindowViewModel中是否存在类似"UserControl currentControl"的属性,该属性设置为LoginView或OverviewScreenView.

Q3.MainWindow是否应该在visual studio设计器中设置LoginView.或者它应该留空,并以编程方式确认没有人登录,因此一旦加载MainWindow,它就会创建一个LoginView并在屏幕上显示它.

下面的一些代码示例是否有助于回答问题

MainWindow的XAML

<Window x:Class="WpfApplication1.MainWindow"
    xmlns:local="clr-namespace:WpfApplication1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="372" Width="525">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <local:HeaderView Grid.ColumnSpan="2" />

        <local:ButtonsView Grid.Row="1" Margin="6,6,3,6" />

        <local:LoginView Grid.Column="1" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" />
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

MainWindowViewModel

using System;
using System.Windows.Controls;
using WpfApplication1.Infrastructure;

namespace WpfApplication1 …
Run Code Online (Sandbox Code Playgroud)

c# wpf user-interface mvvm

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

检测Toast消息

我不认为这是可能的,因为我还没有在SDK文档中找到任何内容.

但我知道是否有可能编写一个记录Toast消息的应用程序.记录哪个应用程序显示它以及显示的消息包含什么.

这是完全个人的努力来创建可以检测吐司消息的应用程序.因为我的手机上的东西正在创建一个叫"发送..."的祝酒词,每天约一次,而对于我的生活,我无法追踪有问题的应用程序(服务类).我认为它可能是GMail或Evernote,但是发送的Toast消息略有不同.我打算建立一个应用程序,因为1)我不知道LogCat是否会显示任何内容,2)我不想让我的个人/开发电话一直插入PC(如"发送" ......"消息很少发生".

android toast

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

需要帮助避免使用Singleton

我不是一个单身人士的仇敌,但我知道他们受到了虐待,因此我想学会在不需要的时候避免使用它们.

我正在开发一个跨平台的应用程序(Windows XP/Vista/7,Windows Mobile 6.x,Windows CE5,Windows CE6).作为流程的一部分,我将代码重新分解为单独的项目,以减少代码重复,从而有机会修复初始系统的错误.

正在分离的应用程序的一个这样的部分非常简单,它是一个概要管理器.该项目负责存储配置文件.它有一个Profile类,其中包含应用程序所有部分使用的一些配置数据.它有一个ProfileManager包含的类Profiles.在ProfileManager将读取/保存Profiles在硬盘作为单独的XML文件,并允许检索和设置"活动"应用程序Profile.简单.

在第一个内部构建中,GUI是反模式SmartGUI.这是一个没有MVC/MVP的WinForms实现,因为我们希望它能够更快地工作而不是精心设计.这导致ProfileManager了单身人士.这在应用程序的任何地方都是如此,GUI可以访问活动Profile.

这意味着我可以ProfileManager.Instance.ActiveProfile根据需要去检索系统不同部分的配置.每个GUI也可以对配置文件进行更改,因此每个GUI都有一个保存按钮,因此它们都可以访问ProfileManager.Instance.SaveActiveProfile()方法.

我认为在这里使用单身人士并没有错,因为我认为它没有任何错误,但我知道单身人士并不理想.有没有更好的方法来处理?是否应将ProfileManager的实例传递到每个Controller/Presenter?创建ProfileManager时,是否应创建其他核心组件,并在更改配置文件时注册事件.这个例子非常简单,可能是许多系统中的一个常见功能,所以认为这是学习如何避免单身人士的好地方.

Ps我不得不针对Compact Framework 3.5构建应用程序,它确实限制了很多可以使用的普通.Net Framework类.

c# oop singleton design-patterns

9
推荐指数
2
解决办法
895
查看次数

将WCF服务添加到现有应用程序?

我有一个现有的应用程序,现在需要与移动设备进行交互.移动设备具有wifi连接,并且将连接到在LAN上托管主应用程序的PC.移动设备只需添加/编辑/查找/删除主应用程序正在维护的对象.主应用程序已将其功能封装在一些简单的存储库类中.

我相信这种方法是向主应用程序添加一个WCF服务,该服务公开了移动设备可以调用的一组方法.但是我今天查找了WCF并试图设置一个示例应用程序,但是当调用WCF方法时它无法访问任何数据,因此我觉得WCF服务在其自己的应用程序域中运行,因此无法访问主应用程序中的相同静态类.

如果我在VS 2008/2010中设置WCF服务项目,我如何在与主WinForms应用程序相同的应用程序域下运行它,以便LAN上的远程应用程序可以与它通信以从应用程序获取数据.

下面是我的WinForm示例

using System;
using System.ServiceModel;
using System.Windows.Forms;
using DataProject;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public TestDataProject.DataStore Datastore = TestDataProject.DataStore.GetInstance();

        public Form1()
        {
            InitializeComponent();
            Datastore.Add(new MyObj { ID = 1, Data = "hello" });
            Datastore.Add(new MyObj { ID = 2, Data = "world" });
            Datastore.Add(new MyObj { ID = 3, Data = "item3" });
            Datastore.Add(new MyObj { ID = 4, Data = "item4" });
            Datastore.Add(new MyObj { ID = 5, Data = …
Run Code Online (Sandbox Code Playgroud)

c# wcf windows-mobile winforms

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

在android中启动活动时,在标题栏中隐藏应用程序启动器图标

我搜索过但没有找到类似的问题,因为我不确定如何在一个句子中逐步进行.我正在使用ActionBarSherlock,带有徽标而不是启动器图标(即72x72图标),活动的顶角有文本.

当活动第一次加载时,只需几分之一秒.在带有徽标的操作栏出现之前,我会看到清单中定义的启动器图标和标签(如下所示).这个家庭活动非常简单,所以它没有做任何可能导致延迟的额外装载.

<application
    android:hardwareAccelerated="true"
    android:icon="@drawable/launcher_icon"
    android:label="@string/app_name"
    android:screenOrientation="portrait" >

    <activity
        android:name=".SplashScreenActivity"
        android:label="@string/app_name"
        android:logo="@drawable/ab_logo"
        android:theme="@android:style/Theme.Light.NoTitleBar" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".HomeActivity"
        android:label="@string/homeitle"
        android:logo="@drawable/ab_logo"
        android:theme="@style/MyTheme" >
    </activity>

 </application>
Run Code Online (Sandbox Code Playgroud)

我可以通过将文本设置为与背景相同的颜色来使文本"消失",但是我无法找到从活动中删除/隐藏启动器图标的方法.

我已经设置了一个启动画面活动(如上面的清单所示),它只会加载发生问题的家庭活动.这确实有帮助,但有时加载活动时仍会出现问题.

public class SplashScreenActivity extends Activity
{
   @Override
   public void onCreate(Bundle savedInstanceState)
   {
        super.onCreate(savedInstanceState);
   }

   @Override
   public void onResume()
   {
       super.onResume();
       Intent i = new Intent(getBaseContext(), HomeActivity.class);
       startActivity(i);
       finish();
   }
}
Run Code Online (Sandbox Code Playgroud)

有没有人知道隐藏启动器图标和标题标签的方法,以便在显示ActionBarSherlock之前它不显示?理想情况下,不需要启动屏幕,因为有几种方法可以访问活动,这将避免上面显示的启动画面.

---更新我的主题文件----

   <style name="MyTheme" parent="Theme.Sherlock.ForceOverflow">
    <item name="android:windowBackground">@color/white</item>
    <item name="android:actionBarStyle">@style/MyTheme.ActionBar</item>
    <item name="android:actionMenuTextColor">@color/white</item>
    <item name="actionBarStyle">@style/MyTheme.ActionBar</item>
    <item name="actionMenuTextColor">@color/white</item>
</style>

<style …
Run Code Online (Sandbox Code Playgroud)

java icons android actionbarsherlock android-actionbar

7
推荐指数
1
解决办法
7684
查看次数

正确使用存储库/服务类

我正在开发一个相当轻量级的客户端应用程序(.Net中的桌面应用程序,因为将来可能需要连接其他应用程序),以便为工程师跟踪业务中的RMA,工程师将查看和更新​​应用程序中的状态,客户将在网站上创建/查看RMA.

我想知道我对服务和存储库类的预期用法是否正确.Web服务以JSON格式提供数据,我可以从中构造RMA对象.此Web服务可通过以下方式访问http://myRMA.com/repairs/2234/RMA.JSON

RMARepository使用类似方法获取RMA的代码是否会在类中GetRMA(int RMAId),并且应该RMARepository遵循单例设计模式吗?

如果更新RMA,即项目正在检查并等待报价接受,则在服务类中完成,该服务类调用RMARepository来提交更新.请问IsExists(int RMAId)在这个服务类或者是在仓库?

我熟悉Presentation - Application(Logic) - Data Access - Data(Database)artitecture,以及MVP.但我确实想知道Service课程适合哪里.

c# service design-patterns domain-driven-design repository

6
推荐指数
1
解决办法
6873
查看次数

WPF样式/模板继承

我正在尝试学习WPF,并试图通过使用样式使默认的.Net控件看起来不同.使用C#作为我的首选语言,尽管下面的所有代码都是WPF标记.

我今天用新主题设置了gmail(见下图),从而让我自己成为挑战,可以在WPF中完成.

新的GMail按钮

我设法实现的是Spam通过使用带有控件模板和触发器的样式来创建中间按钮.

右侧和左侧按钮非常相似,但只有2个不同.它们的左侧或右侧的圆角半径为1,边距为15,而中间的按钮则将它们都设置为0.

问题!

Q1.可以通过某种类型的继承来完成,而不是复制整个样式并仅更改这两个属性.右侧和左侧按钮的位置基于现有样式,但它会进行2次视觉更改.我在创建新样式时已尝试过BasedOn属性,但无法编辑所需的属性.

Q2.样式是在WPF中解决此问题的正确方法.在WinForms中,您将创建一个自定义控件,该控件具有链接到枚举的可见属性,即您单击按钮,样式选项可能是Left,Middle,Right.

Q3.最难的问题直到最后.是否可以制作它,所以如果一个按钮应用了我的风格.然后当您将其背景颜色设置为蓝色时.然后按钮保持渐变但不是它们是灰白色,而是现在是蓝色的阴影.即背景线性渐变画笔基于,而不是覆盖已应用于按钮的背景颜色.或者这些需要定义单独的样式.我个人看不到没有某种类型的代码可以实现这一点,即在WPF标记中使用单个画笔制作渐变画笔.

即按钮如下方的蓝色按钮和灰色/普通按钮

谷歌按钮2

我的风格

<Style x:Key="GoogleMiddleButton" TargetType="{x:Type Button}">
        <Setter Property="Background">
            <Setter.Value>
                <LinearGradientBrush StartPoint="0,1" EndPoint="0,0">
                    <GradientStop Color="#F1F1F1" Offset="0"/>
                    <GradientStop Color="#F5F5F5" Offset="1"/>
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
        <Setter Property="Foreground" Value="#666666"/>
        <Setter Property="FontFamily" Value="Arial"/>
        <Setter Property="FontSize" Value="13"/>
        <Setter Property="FontWeight" Value="Bold"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border Name="dropShadowBorder"
                        BorderThickness="0,0,0,1"
                        CornerRadius="1"
                        >
                        <Border.BorderBrush>
                            <SolidColorBrush Color="#00000000"/>
                        </Border.BorderBrush>
                    <Border Name="border" 
                    BorderThickness="{TemplateBinding BorderThickness}"
                    Padding="{TemplateBinding Padding}" 
                    CornerRadius="0" 
                    Background="{TemplateBinding Background}">
                        <Border.BorderBrush>
                            <SolidColorBrush Color="#D8D8D8"/>
                        </Border.BorderBrush>
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                        </Border>
                    </Border> …
Run Code Online (Sandbox Code Playgroud)

c# wpf user-interface styles controltemplates

6
推荐指数
1
解决办法
4750
查看次数

Android屏幕方向因设备而异

描述

我有一个活动,在表面视图上显示相机预览.我不希望它在方向更改时重新启动(因为它不断扫描QR码),因此方向被锁定为纵向.

我遇到的问题是我需要在屏幕底部向用户显示屏幕上的说明.鉴于屏幕被锁定在一个方向,我不会收到新方向的通知,因为活动没有重新绘制.因此,无论手机处于纵向,纵向,横向还是尊重的景观,指令都在同一个地方呈现.

为了解决这个问题,我联系了传感器管理器,实时读取方向.(请参阅下面的代码)阅读完之后,我自己制定了方向,并根据需要移动我的说明,因为每次更新都会发送给我.到目前为止,这一直对我有用.在华硕Transformer Prime和Xoom平板电脑上进行测试时.平板电脑将方向返回为"90"​​表示纵向,而不是像其他2部手机一样返回"0".因此,您可以在下面的代码中看到,我检查平板电脑(大屏幕)并减去额外的90度.

问题

问题是新的Nexus 7平板电脑没有这种额外的偏见.在肖像中它返回"0",但我将其检测为平板电脑,因此减去90度因此结果为270并且它将我的指示放置为平板电脑处于横向模式.我假设背后的原因是Xoom/Transformer设计用于横向,Nexus用于纵向,但除非我知道所有受影响的设备,否则无济于事.

是否有一种可靠的方法来检测所有设备的方向并"实时"返回结果,如下面的代码所示,但是考虑到设备的默认方向(即Phones + Nexus 7是纵向,但大多数平板电脑都是景观)?

现行守则

    boolean large = ((getBaseContext().getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE);
    boolean xlarge = ((getBaseContext().getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == 4);       
    isTablet = large || xlarge;
    myOrientationEventListener = new OrientationEventListener(getBaseContext(), SensorManager.SENSOR_DELAY_NORMAL)
    {

        @Override
        public void onOrientationChanged(int orientation)
        {
            if (orientation == -1)
            {
                return;
            }

            if (isTablet)
            {
                orientation += -90;
                if (orientation < 0) // keep the result between 0-360
                {
                    orientation += 360;
                }
            }

            // Work out the …
Run Code Online (Sandbox Code Playgroud)

android sensor orientation screen-orientation android-sensors

6
推荐指数
1
解决办法
2533
查看次数