2017-08-23 1 views
0

に私は、JSONファイルからListViewを作成しました。今すぐタップされたViewCellからデータを渡したいので、私は自分のプロセスを続けることができます。ここではさらに、コードビハインドでリストビューのデータを扱うitemtappedイベント

は、この機能listViewJson_ItemTappedがタップ各項目に最後にやるべきものだ:$"{id}-{curDateTime}.jpg"

    は、ユーザーが撮影した画像はこのように命名される2枚の画像
  • を取る必要があり、カメラを起動し
  • 両方の画像は、前述のJSONファイルが同様に

右に保存されているWebサービスのディレクトリにアップロードされますなしwタップしたデータをどのように渡すかわからないViewCell。さらに、私は第2の強制写真に執着した。これまでのところ、私のコードは1つの写真を取ることができますが、アップロードでは未処理の例外がスローされます(IIS側からこの問題を見ている)。ここで

ListViewからXAMLコードです:

<ListView x:Name="listViewJson" Grid.Column="0" BackgroundColor="White" ItemTapped="listViewJson_ItemTapped"> 
        <ListView.ItemTemplate> 
         <DataTemplate> 
          <ViewCell> 
           <Grid HorizontalOptions="Center" VerticalOptions="Center"> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="Auto" /> 
             <ColumnDefinition Width="Auto" /> 
             <ColumnDefinition Width="Auto" /> 
            </Grid.ColumnDefinitions> 
            <Grid.RowDefinitions> 
             <RowDefinition Height="Auto" /> 
            </Grid.RowDefinitions> 
            <Label Grid.Column="0" Text="{Binding id}" FontAttributes="Bold" /> 
            <Label Grid.Column="1" Text="{Binding fzg_kz}" FontAttributes="Bold" /> 
            <Label Grid.Column="2" Text="{Binding timestamp}" FontAttributes="Bold" /> 
           </Grid> 
          </ViewCell> 
         </DataTemplate> 
        </ListView.ItemTemplate> 
       </ListView> 

そしてここでは、私のC#のコードビハインドlistViewJson_ItemTappedからです:

private async void listViewJson_ItemTapped(object sender, EventArgs e) 
     { 
      { 
       await CrossMedia.Current.Initialize(); 

       if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported) 
       { 
        await DisplayAlert("No Camera", ":(No camera available.", "OK"); 
        return; 
       } 

       DateTime dt = DateTime.Now.AddHours(2); 
       var format = "MM/dd/yyyy_hh:mm:ss"; 
       String curDateTime = dt.ToString(format); 

       var _mediaFile = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions 
       { 
        Directory = "Sample", 
        Name = $"{curDateTime}.jpg" 
       }); 

       if (_mediaFile == null) 
        return; 

       var image = new Image(); 
       image.Source = ImageSource.FromStream(() => 
       { 
        return _mediaFile.GetStream(); 

       }); 

       var content = new MultipartFormDataContent(); 
       content.Add(new StreamContent(_mediaFile.GetStream()), "\"file\"", $"\"{_mediaFile.Path}\""); 
       var httpClient = new HttpClient(); 
       var uploadServiceBaseAddress = "http://xxx.xxx.xxx.xxx/files"; 
       var httpResponseMessage = await httpClient.PostAsync(uploadServiceBaseAddress, content); 
      }; 
     } 

私は続けることができないため、この問題は本当に私に頭痛を与えますこれがなければ私の仕事。 私はプログラミングに慣れていないので、どんなアドバイスや参考文献も高く評価されます。事前に

おかげで私が正しくあなたを理解していれば、ポール

+0

未処理の例外の問題は、おそらく不適切な要求か、画像が大きすぎることです。最初に2枚の写真を作成してアップロードすることもできます(または、バックグラウンドでアップロードすることもできます)。カメラのforループを実行します。第二に、リストビューのデータにアクセスできないとどういう意味ですか?あなたはインスタンスIDのためにしたいですか? –

+0

@JordyDieltjensちょっとジョーディー、あなたの返事をありがとう。私は現在、処理されていない例外をチェックしています。今、私は実際のデバイスに編成していますので、よりリアルなものになります...カメラのループでいい考えです。私はこれを新しいContentPageに入れて、ProgressBarのようなものを適用することができます。 ListViewからデータにアクセスすると、私はViewCellからバインドされた情報が必要であることを意味しました。写真などの固有のファイル名を生成することができます。あなたは私の言いたいことを知っていますか? – paulvoelker

答えて

0

は、これはあなたが一意のファイル名を取得するために欲しいものでなければなりません:

((ObjectType)(e.Item)).Id.ToString() + "-" + DateTime.Now.ToString(); 

はオブジェクトでのObjectTypeを交換することを忘れないでくださいあなたがリストを埋めるのに使ったこと。

カメラの場合は、単純なループを作成することをお勧めします。実際には、必要に応じて単純なプログレスバーを使用できます。

未処理の例外に関するこれまでの進捗状況はありますか?私はこのようなエラーを見つけるために何をしたいのですか?私の出力デバッグにjsonを書き、jsonをPostmanにコピーして送信します。あなたが処理されていないよりも優れたエラーを得るでしょう

私はこれが明確だったことを願っています!

idのいくつかの追加の例を編集します。

だから、例えば、あなたはJSON以下ました:これはリストにあり、あなたがこれを変換する必要がクリックされた場合は今

{ 
"name":"John", 
"age":30 
} 

を。 クラス被呼者を作成し、この2つのフィールド(名前と年齢)を指定します。 public class Person { private string name; プライベートint年齢。

public Person() { 

    } 

    public int Age 
    { 
     get { return age; } 
     set { age = value; } 
    } 

    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 
} 

これで、最初に与えたコードを使用できます。ObjectTypeをPersonに置き換えてください。

私は、これは、それはまだ私はテストの理由で入れて、いくつかの汚いコードの最大いくつかのクリーニングをNeDSの、それもまだそこにあなたのデバッグウィンドウでJSONを持っている意味、汚れたバージョンであることに注意して(私の写真をアップロードする方法
((Person)(e.Item)).Id.ToString() + "-" + DateTime.Now.ToString(); 

そうHttpClientを、私はそれをベースアドレスを与え、あなたのようにそれが動作しない場合は、私が使用するクライアントのタイプがあることを使用しています。何が明確でない場合は

public static bool InsertAllFotos(tTodo ttodo, List<Fotos> fotos, List<string> blob) 
     { 
      //var test2 = blob[0].blob_data.Bytes; 
      List<tSyndFoto> tFotos = new List<tSyndFoto>(); 
      foreach(var foto in fotos) 
      { 
       tSyndFoto tFoto = new tSyndFoto(); 
       tFoto.id_synd_dossier = ttodo.id_gebouw; 
       tFoto.omschrijving = foto.Omschrijving; 
       tFoto.id_todo = ttodo.id_todo; 
       tFotos.Add(tFoto); 
      } 

      JObject json = new JObject(); 

      json.Add("fotos", JsonConvert.SerializeObject(tFotos)); 

      //tBlob tmpBlob = new tBlob(); 
      //tmpBlob.blob_data = new Binary(); 
      //tmpBlob.blob_data.Bytes = new byte[0]; 
      // tmpBlob.blob_data.Bytes = blob[0].blob_data.Bytes; 
      //var lijst = new List<tBlob>(); 
      //lijst.Add(tmpBlob); 
      json.Add("blobs", JsonConvert.SerializeObject(blob)); 
      //json.Add("blobs", null); 
      //string test = json.ToString(); 

      //var jon2 = JsonConvert.DeserializeObject(blob[0].blob_data.Bytes.ToString()); 
      var test = json.ToString(); 
      test = test.Replace("\"[", "["); 
      test = test.Replace("]\"", "]"); 
      // test = test.Replace("\\n", ""); 
      test = test.Replace("\\", ""); 

      Debug.WriteLine(test); 
      var content = new StringContent(test, Encoding.UTF8, "application/json"); 


      var resp = client.PostAsync("InsertFotos", content); 


      if (resp.Result.IsSuccessStatusCode) 
      { 

       var repStr = resp.Result.Content.ReadAsStringAsync(); 


       JObject jo = JObject.Parse(repStr.Result.ToString()); 
       return jo.SelectToken("InsertFotosResult", false).ToObject<bool>(); 



      } 

      return false; 
     } 

を依頼するhesistateはありませんここでJSONがあります私はこれから得ます(ブロブは私の写真ですが、大きすぎるためいくつかのデータを切り捨てました):

{ 
    "fotos": [{"id_synd_foto":"00000000-0000-0000-0000-000000000000","id_blob":null,"id_synd_dossier":"xxx","web_image":null,"uploaded":null,"omschrijving":null,"datum":null,"id_todo":"xx","id_synd_eigenaarsnet_melding":null,"id_eigenaar":null,"id_synd_kavel":null,"bijlage_melding":null}], 
    "blobs": ["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"] 
} 
+0

こんにちはジョーディー、あなたは私を「Id」と誤解しました。 'Id'は私の' x:Name = "listViewJson" '(XAMLコードを見てください)に解析されたJSONファイルから来ています。そして今、私はこの 'ListView'のタップされたViewCellから' Id'にアクセスしたいのですが、どういう意味ですか?私は現在、他のもののためにこのコードではあまり働いていません。私はちょうど今Postmanをダウンロードし、あなたが私に言ったことをしようとしています。しかし、なぜあなたはJSONについて言及しましたか?撮った写真をアップロードしたいですか?再度お返事ありがとうございます。 Paul – paulvoelker

+0

あなたはリストの中にそのjsonを置くので、あなたは私の答えでidを得ることができるはずです。あなたが今追加する必要があるのは、jsonファイルのフィールドを持つクラスを作成することです。リストビューアイテムをそのオブジェクトに変換することができます。 (明確でない場合は、私に例を挙げます)。私があなたが画像をアップロードするためにjsonを使用していると仮定した画像のJSONパートのアップロードについては、それが私のやり方です。どのように現在アップロードしようとしていますか? –

+0

例が本当に感謝します。現在、私はHttpClientで画像をアップロードしようとしています。私は既にそのプロパティを持つクラスを作成しました。そして、あなたの写真をアップロードしているあなたのコードは本当に役に立つと思います。ジョーディーありがとう! – paulvoelker

関連する問題