2014-11-07 10 views
5

Ich versuche, meine Windows Phone App mit Freigabefunktionen zu erweitern. Der Code verhält sich auf unvorhersehbare Weise. Manchmal funktioniert es, aber meistens nicht und ich konnte keine Details darüber herausfinden, was den Absturz verursacht hat. Könnte jemand bitte den folgenden Code durchgehen und mich wissen lassen, ob ich etwas verpasst habe? Vielen Dank!Windows Phone 8.1 App stürzt auf ShowShareUI ab()

public ArticlePage() 
{ 
    this.InitializeComponent(); 
    //.. 
    RegisterForShare(); 
} 

private void RegisterForShare() 
{ 
    DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView(); 
    dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager, 
     DataRequestedEventArgs>(this.ShareLinkHandler); 
} 

private void ShareLinkHandler(DataTransferManager sender, DataRequestedEventArgs e) 
{ 
    DataRequest request = e.Request; 
    DataRequestDeferral defferal = request.GetDeferral(); 

    request.Data.Properties.Title = this.article.Title; 
    request.Data.Properties.Description = this.article.Summary; 
    request.Data.SetWebLink(new Uri(this.article.UrlDomain)); 

    defferal.Complete(); 
} 

private void ShareCommand_Click(object sender, RoutedEventArgs e) 
{ 
     DataTransferManager.ShowShareUI(); 
} 

UPDATE

Der Code funktioniert immer, während ich von Visual Studio Debuggen bin aber ziemlich sonst nie. Ich habe einen Release-Build erstellt, der denkt, dass im Debug-Build Code enthalten sein könnte, der das Problem verursacht, aber das hat keinen Unterschied gemacht.

+0

versuchen, die RegisterForShare(); im OnNavigatedTo anstelle des Konstruktors. –

+0

Versuchte das.Es machte keinen Unterschied. –

+0

Setzen Sie alle Funktionen mit try catch und zeigen Sie alle Fehler an, um den Fehler zu lokalisieren, da die bereitgestellten Informationen nicht ausreichen, um Ihnen mehr zu helfen. –

Antwort

1

Okay, ich hatte das gleiche Problem. ShowShareUi unterbricht Ihre App tatsächlich. Wenn Sie versuchen, Ihre App auszusetzen, erhalten Sie den Fehler. Es ist eigentlich das Serialisierungsproblem.

Wenn Sie in den Fehler suchen möchten, dann beim Debuggen, die Lebenszyklusereignisse drücken und suspendieren, werden Sie jetzt im Debug-Modus zum Absturz bringen.

suspend in debug mode

Wenn Sie zwischen den Seiten mit einer benutzerdefinierten Klasse navigieren Sie Fehler bekommen würde. * Mein Vorschlag ist, dass Sie in jsonstring konvertieren und senden und es zurückbekommen würden. *

+0

Dies half mir endlich, das Problem zu debuggen. Das Problem war, dass ich eine Obejct als NavigationParameter schickte. Ich habe es behoben, indem ich das Objekt in eine Zeichenkette umgewandelt habe, wie Sie es empfohlen haben: D –

+0

@ W.K. S Ich stehe ebenfalls vor einem ähnlichen Problem. Könnten Sie Ihre Antwort über ein Objekt auf eine Zeichenkette aktualisieren? – mehul9595

+0

@ mehul9595 Überschreibe die Methode "tostring" in deinem benutzerdefinierten Objekt oder versuche die Bibliothek von http://www.newtonsoft.com/json. newtonsoft ist eine sehr beliebte Bibliothek. – Mani

4

Ich hatte auch dieses Problem vor kurzem. Die Freigabebenutzeroberfläche stürzt ab, wenn einer der wichtigen Parameter nicht festgelegt ist. In Ihrem Fall würde ich vermuten, dass

this.article.UrlDomain 

ist Null oder kein gültiges Uri-Muster. Sie sollten eine if-Klausel erstellen und sicherstellen, dass Sie mit einem echten Uri zu tun haben. Um den Code zu testen, sollten Sie fest codierte Konstanten einfügen und erneut ausführen. Wenn es nicht abstürzt, überprüfen Sie nacheinander Ihre Title, Summary und UrlDomain.

Andere Orte zu untersuchen:

Versuchen Sie, Ihre Handler in der OnNavigatedTo Methode hinzufügen und entfernen Sie es, wenn Sie die Seite gehen

protected override async void OnNavigatedTo(NavigationEventArgs e) 
{ 
    DataTransferManager.GetForCurrentView().DataRequested += SharePage_DataRequested; 
} 

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e) 
{ 
    base.OnNavigatingFrom(e); 
    DataTransferManager.GetForCurrentView().DataRequested -= SharePage_DataRequested; 
} 

ich meinen Code auch gesucht und sah amtliche Proben wieder und habe keine Probleme gefunden. Nur um sicher zu sein - wenn ich du wäre, würde ich alle unnötigen Zeilen in meinem Code entfernen und sie so nah wie möglich an die offiziellen Beispiele bringen und sie dann dahin zurückführen, wo sie von dort war, weshalb ich diese beiden kommentieren würde Linien auch:

void SharePage_DataRequested(DataTransferManager sender, DataRequestedEventArgs args) 
{ 
    DataRequest request = e.Request; 
    //DataRequestDeferral defferal = request.GetDeferral(); 

    request.Data.Properties.Title = this.article.Title; 
    request.Data.Properties.Description = this.article.Summary; 
    request.Data.SetWebLink(new Uri(this.article.UrlDomain)); 
    //defferal.Complete(); 
} 
+0

Danke für den Vorschlag. Ich habe die URLs überprüft und sie sind alle in Ordnung. –

+0

Ich habe ein paar Gedanken hinzugefügt. Wenn ich etwas Zeit später habe, werde ich Ihren Code ausprobieren. – Fred

+0

Ich habe alle deine Kommentare ausprobiert, aber keiner von ihnen hat einen Unterschied gemacht. Es stürzt immer noch –

1

Ich habe ähnliches Problem (Absturz ShowShareUI) konfrontiert. Nach sehr langen Untersuchungen habe ich festgestellt, dass dies wegen unbehandelter Ausnahme in SaveFrameNavigationState (SuspensionManager-Klasse aus Vorlagenprojekt) auftritt. In meinem Fall war es, weil die SessionStateForFrame-Methode beim Analysieren der Klasse fehlgeschlagen ist, die nicht serialisiert werden konnte. Überprüfen Sie in SaveState der Seite, was Sie im Seitenstatus speichern. Es passiert nicht nur auf ShowShareUI, sondern im Suspend-Modus im Allgemeinen.