2014-11-07 31 views
5

Tôi đang cố thêm chức năng chia sẻ vào Ứng dụng Windows Phone của mình. Mã hoạt động theo cách không thể đoán trước. Đôi khi nó hoạt động, nhưng chủ yếu là nó không và tôi đã không thể có được bất kỳ chi tiết về những gì gây ra vụ tai nạn. Ai đó có thể xin vui lòng đi qua mã dưới đây và cho tôi biết nếu tôi đã bỏ lỡ một cái gì đó? Cảm ơn!Ứng dụng Windows Phone 8.1 gặp sự cố trên ShowShareUI()

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(); 
} 

CẬP NHẬT

Mã này luôn luôn làm việc trong khi tôi đang gỡ lỗi từ visual studio nhưng khá nhiều không bao giờ khác. Tôi đã xây dựng bản phát hành cho rằng có thể có một số mã trong bản dựng gỡ lỗi đang gây ra sự cố nhưng điều đó không tạo ra bất kỳ sự khác biệt nào.

+0

hãy thử đặt RegisterForShare(). trong OnNavigatedTo thay vì hàm tạo. –

+0

Đã thử điều đó.Nó không tạo ra sự khác biệt. –

+0

đặt tất cả các chức năng với thử bắt và hiển thị bất kỳ lỗi nào để xác định lỗi vì những gì được cung cấp không đủ để giúp bạn nhiều hơn. –

Trả lời

1

OK, tôi đã gặp phải vấn đề tương tự. ShowShareUi thực sự tạm ngưng ứng dụng của bạn. Nếu bạn thử tạm ngưng ứng dụng của mình, bạn sẽ gặp lỗi. Nó thực sự là vấn đề serialization.

Nếu bạn muốn xem xét lỗi, sau đó trong khi gỡ lỗi, nhấn các sự kiện vòng đời và tạm ngừng, bạn sẽ gặp sự cố trong chế độ gỡ lỗi ngay bây giờ.

suspend in debug mode

Nếu bạn đang điều hướng giữa các trang với một lớp tùy chỉnh, bạn sẽ nhận được lỗi. * Đề nghị của tôi là bạn sẽ chuyển sang jsonstring và gửi và nhận được nó trở lại *

+0

Điều này cuối cùng đã giúp tôi gỡ lỗi vấn đề. Vấn đề là tôi đã gửi một obejct như một NavigationParameter. Tôi cố định nó bằng cách chuyển đổi đối tượng thành chuỗi như bạn đã đề xuất: D –

+0

@ W.K.S Tôi cũng đang gặp vấn đề tương tự, bạn có thể cập nhật câu trả lời của bạn về đối tượng thành chuỗi không? – mehul9595

+0

@ mehul9595 Ghi đè phương thức xâu chuỗi trong đối tượng tùy chỉnh của bạn hoặc thử sử dụng thư viện từ http://www.newtonsoft.com/json. newtonsoft là một thư viện rất phổ biến. – Mani

4

Tôi cũng gặp sự cố đó gần đây. Giao diện người dùng chia sẻ bị treo khi một trong các thông số quan trọng không được đặt. Trong trường hợp của bạn, tôi nghi ngờ rằng

this.article.UrlDomain 

là null hoặc không phải là mẫu Uri hợp lệ. Bạn nên xây dựng một mệnh đề if xung quanh nó và đảm bảo rằng bạn đang đối phó với một Uri thực. Để kiểm tra mã của bạn, bạn nên chèn các hằng số được mã hóa cứng và chạy lại. Nếu không bị lỗi, hãy kiểm tra Title, SummaryUrlDomain từng cái một của bạn.

Những nơi khác để điều tra:

Hãy thử thêm xử lý của bạn trong phương pháp OnNavigatedTo và loại bỏ nó khi bạn đang rời khỏi trang

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; 
} 

Tôi cũng đã tìm kiếm mã của tôi và nhìn mẫu chính thức một lần nữa và không tìm thấy bất kỳ defferals. Chỉ cần chắc chắn - nếu tôi là bạn, tôi sẽ loại bỏ tất cả các dòng unicecary trong mã của tôi và nhận nó gần nhất có thể với các ví dụ chính thức và sau đó mở rộng nó trở lại nơi nó được từ đó đó là lý do tại sao tôi sẽ bình luận ra hai các dòng:

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

Cảm ơn bạn đã đề xuất. Tôi đã kiểm tra các URL và tất cả đều ổn. –

+0

Tôi đã thêm một vài suy nghĩ. Nếu tôi có thời gian sau, tôi sẽ đi và thử mã của bạn. – Fred

+0

Tôi đã thử tất cả các bình luận của bạn nhưng không ai trong số họ tạo ra sự khác biệt. Nó vẫn treo –

1

Tôi đã gặp sự cố tương tự (gặp sự cố trên ShowShareUI). Sau khi điều tra rất dài tôi đã tìm thấy, điều này xuất hiện vì ngoại lệ unhandled trong SaveFrameNavigationState (lớp SuspensionManager từ dự án mẫu). Trong trường hợp của tôi, đó là vì phương thức SessionStateForFrame thất bại trong việc phân tích cú pháp lớp không thể được tuần tự hóa. Kiểm tra những gì bạn đang lưu trong trạng thái trang trên SaveState của trang. Nó xảy ra không chỉ trên ShowShareUI mà còn ở chế độ tạm ngưng nói chung.

Các vấn đề liên quan