2016-08-30 2 views
0

Прежде всего, я использую Xamarin с MvvmCross.Действие Android уничтожено при вызове сканера штрих-кода ZXing. Как восстановить?

В моей ViewModel, я использую класс ZXing MobileBarcodeScanner для сканирования штрих-кода, когда пользователь нажимает на кнопку:

var scanner = new MobileBarcodeScanner(); 
var result = await scanner.Scan(); 
if (result != null) 
{ 
    CodigoProduto = result.Text; 
    InternalPesquisarProduto(); 
} 

После сканирования, я запустить InternalPesquisarProduto пустота, которая выбирает только для данных в удаленный сервер, конечно, на штрихкоде, который был прочитан. Этот метод, а также отображать некоторые загрузки сообщения в то время как данные извлекаются:

Ui.DisplayLoading("Searching...", "Searching data"); 
// Code that fetchs the data 
Ui.DismissLoading(); 

Ui это свойство на моем ViewModel определяется следующим образом:

protected IUiInteractor Ui { get; set; } 

Я получаю его с помощью инъекции зависимостей. Вот соответствующий код от использования неоспоримой реализации в этом сценарии:

public class AndroidUiInteractor : IUiInteractor 
{ 
    private IMvxAndroidCurrentTopActivity _mvxCurrentTopActivity; 

    public AndroidUiInteractor(IMvxAndroidCurrentTopActivity mvxCurrentTopActivity) 
    { 
     _mvxCurrentTopActivity = mvxCurrentTopActivity; 
    } 

    public void DisplayLoading(string title, string message) 
    { 
     _mvxCurrentTopActivity.Activity.RunOnUiThread(() => 
     { 
      _progressDlg = new ProgressDialog(_mvxCurrentTopActivity.Activity); 
      // Configuring the title and the message 
      _progressDlg.Show(); 
     }); 
    } 
} 

Проблема заключается в том, что, когда scanner.Scan называется, моя деятельность Вызывающей разрушаются, поэтому, когда я называю Ui.DisplayLoading, то _mvxCurrentTopActivity.Activity является null.

Что является самым странным в этом случае, так это то, что у меня есть два Samsung с Android 5.0 API 21, которые я использую в своих тестах, и эта проблема возникает только в одном из них, с другой стороны, активность не прерывается, когда вызывая scanner.Scan.

Примечание: Извините за что-то не так в коде, но из-за политики компании я могу получить доступ к Интернету только через Terminal Service, а Ctrl + V отключен.

+0

Почему бы не сначала вернуться к предыдущей операции перед вызовом 'InternalPesquisarProduto'? – pnavk

ответ

0

Оказалось, проблема была в аппарате. После перепрограммирования его конфигурации он работал правильно.

Это может быть не окончательное решение для всех, кто сталкивается с этой проблемой, но в моем сценарии это может быть сделано.