我喜欢XML评论.然而,随着一切崩溃,每两行看起来像:
[/// summary ...]
public void CreateUser(string username, string password)[...]
Run Code Online (Sandbox Code Playgroud)
将此乘以数十或数百种方法,并且生成的折叠代码很难筛选出来. 我可以将这些注释移动到单独的XML文件中,并且仍然让Visual Studio识别该关联,以便它们仍然显示在Intellisense中吗?如果是这样,我该如何建立这种关联?我还使用SandCastle根据这些注释生成文档,因此SandCastle也必须识别该关联.
刚刚完成开始教程,虽然我的应用运行正常,但我只是想确保我的Android术语正确.
例如,我经历的第一个应用程序教程是否修改了activity_main.xml以包含:
<EditText android:id="@+id/edit_message"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="@string/edit_message"
android:layout_weight="1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage" />
Run Code Online (Sandbox Code Playgroud)
我是否理解这些(EditText,Button)元素本身是单独的视图?换句话说,上面的代码包含两个"视图",而不是两个"控件"?稍后在代码中我们遇到了一个名为TextView的东西,它直接在其中包含"View"一词,而其他的则没有,这有点让我失望.
我唯一的另一个经验是ASP.Net和C#web开发,所以我想我的问题可以表达为,Android"Views"相当于ASP.Net Web Controls(asp:DropDownList,asp:Button等)?如果我想在上面的代码中添加更多控件,比如更多按钮,我会说,"我要为这个布局添加更多视图?" 或者是,"我要为这个视图添加更多控件?" 要么...?
在我的TitleScreen活动中,我有......
@Override
public boolean onTouchEvent(MotionEvent event)
{
Log.d("MyActivity", "in onTouchEvent!");
MediaPlayer myplayer = MediaPlayer.create(TitleScreen.this, R.raw.mysound);
myplayer.start();
startActivity(new Intent("com.example.GAME"));
return super.onTouchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
这导致声音在点击屏幕时快速连续播放3次,使我想播放的声音有一个延迟的回声.我检查了日志,以及我的"onTouchEvent!" 消息被记录了3次.
此活动只是标题屏幕的静态图像,您可以点击它来开始下一个活动,当您这样做时,指定的声音应该是播放器.
对于我的特定问题,我能够通过放置一个全局级别的int变量来解决它:
private static int playerInstances = 0;
Run Code Online (Sandbox Code Playgroud)
然后用我的MediaPlayer线包装:
if (playerInstances == 0)
{
MediaPlayer myplayer = MediaPlayer.create(TitleScreen.this, R.raw.critical1);
myplayer.start();
playerInstances++;
}
Run Code Online (Sandbox Code Playgroud)
这保证了该代码只执行一次.所以我的问题解决了.我只是想知道为什么我一次点击onTouchEvent三次.
是的,关于这个特定错误有一百万个问题和线索,有许多记录良好的解决方案,我一定会尝试.但首先我想了解我的特定情况/环境的问题.
在我的情况下,这个错误似乎是完全随机的.我会在几周内没有看到它,然后有一天我会登录我的网站并得到错误.刷新页面,再次登录,没问题.在事件之间的这些时段中,Web服务器没有发生任何特别的特殊情况.
这是另一回事,错误说"如果此应用程序由Web场或群集托管......",但事实并非如此.它只是一个Windows Server 2008.
所以,我理解一般的解决方案是在web.config文件中添加一组静态机器密钥---但为什么这似乎是随机发生的,为什么它发生在我的站点上,它位于单个Windows Server 2008上机?
我正在使用ASP.NET 4,我的站点是在IIS上运行的Web应用程序.
错误信息:
Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
[ViewStateException: Invalid viewstate.
Client IP: ##::##:##:##:##
Port: ##
Referer: http://myserver/login.aspx
Path: /login.aspx
User-Agent: Opera/9.80 (Windows NT 6.1; WOW64; U; en) Presto/2.10.289 Version/12.01
ViewState: /wEPDw...6OCX]
[HttpException (0x80004005): Validation of viewstate MAC failed. If this application …Run Code Online (Sandbox Code Playgroud) 我已经看到了很多关于是否可以指定默认类型的问题(如果没有指定).答案似乎是否定的.我的问题是,如果你的类头需要一个类型参数,你根本就没有把它传递一个什么也它默认为?宾语?采用Queue的简单链接节点实现(缩写):
public class ListQueue<T> implements Queue<T>
{
private Node<T> first;
private Node<T> last;
public void enqueue(T item)
{
Node<T> x = new Node<T>(item);
if (isEmpty())
{
first = x;
last = x;
}
else
{
last.next = x;
last = x;
}
}
public T dequeue()
{
if (isEmpty())
{
throw new IllegalStateException("Queue is empty");
}
T item = first.data;
first = first.next;
if (isEmpty())
{
last = null;
}
return item;
}
}
public class Node<T>
{ …Run Code Online (Sandbox Code Playgroud) 我需要浏览器直接在浏览器中打开它能理解的文件类型(即没有"打开/保存/取消"对话框.
这是我的代码,目前效果很好!...除了每个文件弹出对话框而不直接打开文件:
string filePath = Path.Combine(WebConfigurationManager.AppSettings["NewsAttachmentPath"], context.Request.QueryString["FileName"]);
byte[] bytes = System.IO.File.ReadAllBytes(filePath);
context.Response.Clear();
context.Response.ContentType = "application/octet-stream";
context.Response.Cache.SetCacheability(HttpCacheability.Private);
context.Response.Expires = -1;
context.Response.Buffer = true;
context.Response.AddHeader("Content-Disposition", string.Format("{0};FileName=\"{1}\"", "inline", context.Request.QueryString["FileName"]));
context.Response.BinaryWrite(bytes);
context.Response.End();
Run Code Online (Sandbox Code Playgroud)
如您所见,即使我将Content-Disposition更改为"inline",它仍然会提示下载.这是我知道浏览器理解的文件.换句话说,我可以访问一些随机网站并单击PDF,它将在浏览器中打开.我的网站会让我保存它以便查看它.
对"为什么要使用application/octet-stream?"的先发制人的回答?因为我不想为每种单一文件类型创建处理程序.如果这是错误的,请告诉我.
我在一个表中运行了大约1,300,000条记录的查询.它需要满足某些WHERE条件的某些记录并将它们插入另一个表中.它首先完全清除目标表.
每次执行时,完成查询所需的时间会大大改善:
1st: 5 minutes, 3 seconds
2nd: 2 minutes, 43 seconds
3rd: 12 seconds
4th: 3 seconds
Run Code Online (Sandbox Code Playgroud)
除了点击Execute之外我什么也没做.我的查询看起来像这样(有些缩写用于长度目的):
DELETE FROM dbo.ConsolidatedLogs --clear target table
DECLARE @ClientID int
DECLARE c CURSOR FOR SELECT ClientID FROM dbo.Clients
OPEN c
FETCH NEXT FROM c INTO @ClientID --foreach LogID
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO dbo.ConsolidatedLogs
(col1, col2)
SELECT col1, col2
FROM dbo.CompleteLogsRaw
WHERE col3 = true AND
ClientID = @ClientID
FETCH NEXT FROM c INTO @ClientID
END
CLOSE c
DEALLOCATE c …Run Code Online (Sandbox Code Playgroud) 我有一个名为"UserDatabaseRecord"的类.它有一堆字段,如"username","expiration_date"等.
我有两个UserDatabaseRecord对象列表:列表A和列表B.
我想验证对于列表A中的所有UserDatabaseRecords,用户名字段与列表B中的任何UserDatabaseRecords用户名字段都不匹配.
我能够非常低效地完成这个任务:
for record_a in List_A:
for record_b in List_B:
if record_a.username == record_b.username:
print "Duplicate username: {0}".format(record_a.username)
Run Code Online (Sandbox Code Playgroud)
我觉得它很有用.我只想让它更高效和/或"Pythonic".
这个问题是相关的,但最终我无法弄清楚如何只在一个字段上进行比较时如何将它应用于对象列表:单行检查是否列表中至少有一个项目存在于另一个列表中?
获得了"ClientContacts"列表---其中包含一个LastName(在人类的情况下)或一个EntityName(在通用联系的情况下,例如techsupport@mycompany.com).
我想要做的是按LastName按字母顺序排序此列表,如果不存在LastName(换句话说,存在EntityName),则将该EntityName视为LastName,并继续排序,就像它是LastName一样.
所以期望的结果如下:
这会导致崩溃,因为它遇到了一些没有LastName的ClientContacts.
clientContactList.Sort(
delegate(ClientContact c1, ClientContact c2)
{ return c1.LastName.CompareTo(c2.LastName); });
Run Code Online (Sandbox Code Playgroud)
以下允许我通过而不崩溃,它通过ClientContact EntityName的第一个和那些LastNames对它进行排序:
list.Sort(delegate(ClientContact c1, ClientContact c2) {
try
{
return c1.LastName.CompareTo(c2.LastName);
}
catch
{
try
{
return c1.EntityName.CompareTo(c2.LastName);
}
catch
{
return c1.EntityName.CompareTo(c2.EntityName);
}
}
});
Run Code Online (Sandbox Code Playgroud)
导致:
如何将列表排序为上面所需的结果?
假设我有一个依赖两个模块的脚本:
只会执行Main.py,但是在Main的执行过程中,有多次调用Module1.py和Module2.py内部的方法。
是不是比较常见...
1)将所有内容记录到 Main.py 的日志中?
或者
2)将每个操作各自模块的所有内容记录到日志中?
(tl;博士,如果您理解我的问题,则无需继续阅读。否则,这是一个示例):
示例(使用非常简短的代码):
案例 #1只有一个日志文件,我们将其称为 Main.log。假设记录器名称没有硬编码(尽管在本例中是这样),所以我应该制作 AnotherMain.py ,例如,所有日志条目都将进入 AnotherMain.log
主要.py:
some_value = Module1.get_value("abc")
some_other_value = Module2.get_value("def")
some_result = some_value + some_other_value
log("main", "some_result evaluated successfully")
Run Code Online (Sandbox Code Playgroud)
模块1.py:
def get_value(key):
...
log("main", "returning value for key from Module1")
Run Code Online (Sandbox Code Playgroud)
模块2.py:
def get_value(key):
...
log("main", "returning value for key from Module2")
Run Code Online (Sandbox Code Playgroud)
这将导致 Main.log 读取:
some_result evaluated successfully
returning value for key from Module1
returning value for key from Module2
Run Code Online (Sandbox Code Playgroud)
案例 #2有三个日志文件,每个模块一个:Main.log、Module1.log、Module2.log。
主要.py: …
在我的所有 Python 主脚本和模块中,我一直在尝试实现一种方法,将未捕获的异常记录到引发异常的模块的记录器中。我在所有文件中都以相同的方式执行此操作:
def log_unhandled_exception(*exc_info):
text = "".join(traceback.format_exception(*exc_info))
logger.critical("An unhandled exception has caused this script to terminate prematurely. Here are the details: {0}".format(text))
sys.exit(2)
def some_function():
# ...
sys.excepthook = log_unhandled_exception
logger = logging.getLogger("Module1") # or "Module2", "Module3", etc., each module has it's own logger
Run Code Online (Sandbox Code Playgroud)
当我遇到未捕获的异常时,有时我无法获得预期的记录器。我认为这与我导入模块的顺序有关:如果我导入 module1 然后导入 module2,然后调用 module2 中的函数并遇到异常,似乎我得到了 module1 的记录器。相反,如果我颠倒导入顺序(module2 在 module1 之前),并且尝试相同的测试(在 module2 中抛出异常),我会正确获取 module2 的记录器。我本以为 LATER 导入会优先(覆盖前者的 sys.excepthook 引用),但没有。
我能够通过在每个模块中为每个记录器引用提供唯一的名称来解决这个问题(我猜......)。因此,要修改上面的代码,此模式的工作原理与模块导入的顺序无关:
def log_unhandled_exception(*exc_info):
text = "".join(traceback.format_exception(*exc_info))
module1_logger.critical("An unhandled exception has caused this script to terminate prematurely. …Run Code Online (Sandbox Code Playgroud) c# ×4
python ×3
android ×2
asp.net ×2
coding-style ×2
exception ×2
list ×2
logging ×2
android-view ×1
compare ×1
file-type ×1
foreach ×1
generics ×1
httphandler ×1
java ×1
linked-list ×1
loops ×1
machinekey ×1
object ×1
python-2.6 ×1
queue ×1
sorting ×1
sql ×1
sql-server ×1
stack ×1
standards ×1
terminology ×1
touch-event ×1
viewstate ×1
xml ×1
xml-comments ×1