我在MonoForAndroid中有一个活动,它利用Zaxy. Net. Mobile在Android上扫描条形码。就扫描和返回结果而言,一切都很好。但是,当我尝试处理scanOverlie上的任何事件时,我得到nullRe的异常。我的代码在下面,任何帮助都将不胜感激。
public async void StartScanSession(ScanSessionEventArgs e)
{
EnsureLoadingZxingOverlay(e);
EnsureStartingZxingBarcodeScanner();
var zxingOptions = MobileBarcodeScanningOptions.Default;
var result = await ZxingBarcodeScanner.Scan(zxingOptions);
HandleScanResult(result, e);
}
private void HandleScanResult(ZXing.Result result, ScanSessionEventArgs e)
{
if (result != null && e.OnFinishCallBack != null)
{
var scanResult = new ScanResult { ShouldStopScanning = false, BarcodeText = result.Text, ScanTime = result.Timestamp, BarcodeFormat = result.BarcodeFormat.ToString(), RawBytes = result.RawBytes };
e.OnFinishCallBack(scanResult);
}
}
private void EnsureLoadingZxingOverlay(ScanSessionEventArgs e)
{
if (ZxingOverlay == null)
{
ZxingOverlay = LayoutInflater.FromContext(this).Inflate(Resource.Layout.scan_custom_layout, null);
ScanLayoutFlashButton = ZxingOverlay.FindViewById<Button>(Resource.Id.ScanLayoutFlashButton);
ScanLayoutDoneButton = ZxingOverlay.FindViewById<Button>(Resource.Id.ScanLayoutDoneButton);
UnhookZxingLayoutButtons();
ScanLayoutFlashButton.Click += (sender, args) => ZxingBarcodeScanner.ToggleTorch();
ScanLayoutDoneButton.Click += (sender, args) => HandleDoneButtonOnZxingScanLayout(e);
}
}
上面的所有代码都工作正常。但是,当我尝试处理布局上的完成按钮时,我得到了NullRe的异常
private void HandleDoneButtonOnZxingScanLayout(ScanSessionEventArgs e)
{
var result = new ScanResult { ShouldStopScanning = true };
if (e.OnFinishCallBack != null && ZxingBarcodeScanner != null)
{
// at this line below, ZxingBarcodeScanner is null,
// but I am sure I have initiated before wiring the event
// I am guessing it is something to do with the context of the async method??
ZxingBarcodeScanner.Cancel();
e.OnFinishCallBack(result);
}
}
下面是例外的详细信息
UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object at Leopard.Mobile.Screens.QVgaPortrait.MainScreen.HandleDoneButtonOnZxingScanLayout (Leopard.Mobile.Business.Event.ScanSessionEventArgs) [0x0001e] in ...\MainScreen.cs:178 at Leopard.Mobile.Screens.QVgaPortrait.MainScreen/c__DisplayClass8.b__6 (object,System.EventArgs) [0x00000] in ...\MainScreen.cs:156 at Android.Views.View/IOnClickListenerImplementor.OnClick (Android.Views.View) [0x0000d] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.10.1-branch/d23a19bf/source/monodroid/src/Mono.Android/platforms/android-14/src/generated/Android.Views.View.cs:1615 at Android.Views.View/IOnClickListenerInvoker.n_OnClick_Landroid_view_View_ (intptr,intptr,intptr) [0x00011] in /Users/builder/data/lanes/monodroid-mlion-monodroid-4.10.1-branch/d23a19bf/source/monodroid/src/Mono.Android/platforms/android-14/src/generated/Android.Views.View.cs:1582 at (wrapper dynamic-method) object.49957671-33c0-4b79-8c3b-36f419ebfaaa (intptr,intptr,intptr)
我在设置Zxing
库的方法和事件的方式上找不到任何问题。尤其是在MonoTounch
上进行了相同的设置后,一切都很好。因此,我进入了源代码,看看<code>扫描器的功能。Cancel()方法在内部执行。我发现它只是在ZxingActivity
上调用Cancel()
方法,所以我从我的代码中执行了这一操作,看起来一切都很好。这可能不是最优雅的解决方案,我在<code>Zxing.Net上报告了一个问题。github上的移动repo(此处),但目前这是有效的,我希望它也能帮助其他人。我还有一篇完整的帖子,详细介绍了我在<code>MonoDroid</code>上使用这个库的经验,以防有人需要。
所以修复程序是替换这一行(来自上面的代码):
ZxingBarcodeScanner.Cancel();
用这一行:
ZxingActivity.RequestCancel();
由于缺乏声誉而无法发表评论,因此在此处发布。
我们遇到了类似的问题,另一个第三方应用程序超出了范围。您是否进行了任何级别的线程安全检查?也许您的ZxingBarcodeScanner只能通过创建它的线程访问,即称为“StartScanSession”的线程。
我不确定如何处理以下情况。有一个接口定义了事件处理方法“onSomethinAccounting()”。 有一个基类将其实现为虚拟方法,并在其中使用一些异步代码。 有一个派生类要重写虚方法,但也要调用。 问题是,我不能将方法调用标记为等待,因为它返回void。事件处理程序可以使用异步void方法,因此不能将其更改为任务(这也不是我的代码)。 那么,我应该如何确保我的派生类执行? 这个解决方案在派生
然而许多事件处理逻辑会更为复杂,所以直接把 JavaScript 代码写在v-on指令中是不可行的。因此v-on还可以接收一个需要调用的方法名称。 示例: <div id="example-2"> <!-- `greet` 是在下面定义的方法名 --> <button v-on:click="greet">Greet</button> </div> var example2 = ne
我正试图从同步方法运行异步方法。但是我不能等待异步方法,因为我在同步方法中。我一定不理解TPL,因为这是我第一次使用它。 每个方法都需要前一个方法来完成,因为第一个方法的数据用于第二个方法。 Await运算符只能在异步方法中使用。考虑用'async'修饰符标记此方法,并将其返回类型更改为'task' 但是,如果我使用async修饰符,这将是一个异步操作。因此,如果我对的调用没有使用await运算符
在Servlet 3.0中,引入了异步处理的概念。所以所有的书都说这消除了每个请求一个线程的要求。我已经测试过了,是的,它确实有效。现在,我有一个简单的servlet,用户在其中以同步模式启动HTTP请求。线程只需Hibernate1秒,然后回复客户端。当我对这种模式进行负载测试时,服务器每秒只能处理4个请求。现在,我将同步模式更改为异步模式,并根据请求创建一个新线程,将原始http线程释放回池。
问题内容: 这个问题已经在这里有了答案 : 循环内的JavaScript封闭-简单的实际示例 (44个答案) 2年前关闭。 我正在运行以下形式的事件循环: 我正在尝试显示一系列警报,显示从0到10的数字。问题是,当触发回调函数时,循环已经经历了几次迭代,并且显示了更高的值。有关如何解决此问题的任何建议? 问题答案: 在启动所有异步操作时,循环将立即运行到完成。当他们将来完成某个时间并调用其回调时,