2017-03-06 11 views
2

私は現在、ユーザがすべての製品を見ることができ、単一の製品を見ることができ、特定の製品をダウンロードできるアプリケーションを開発中です。それは一つの値だけが、onDownloadClick機能、現在値と以前のすべての値が表示されているが返され、ButtonClicked機能で関数はUnity3Dで現在の変数の代わりに変数の前の値を渡しています

IEnumerator ButtonClicked(int num, string name, string url, string color, string size, string price, string description) 
{ 
    prodName.text = name.ToString(); 
    prodColor.text = color.ToString(); 
    prodSize.text = size.ToString(); 
    prodPrice.text = price.ToString(); 
    prodDesc.text = description.ToString(); 

    string Url = url; 
    WWW www = new WWW (Url); 
    yield return www; 
    Texture2D texture = www.texture; 

    Image img = prodImg.GetComponent<Image>(); 
    img.sprite = Sprite.Create (texture, new Rect (0, 0, texture.width, texture.height), Vector2.zero); 

    string name2 = name.ToString(); 
    Debug.Log (name2.ToString()); 
    downloadButton.onClick.AddListener (() => StartCoroutine (onDownloadClick (name2.ToString()))); 

} 


IEnumerator onDownloadClick(string name) { 

    using (IDbConnection dbConnection = new SqliteConnection (conn)) { 
     dbConnection.Open(); 
     using (IDbCommand dbCmd = dbConnection.CreateCommand()) { 
      string sqlQuery = String.Format ("INSERT INTO PRODUCTS(Name) VALUES(\"{0}\")", name); 
      dbCmd.CommandText = sqlQuery; 

      dbCmd.ExecuteScalar(); 
      dbConnection.Close(); 
     } 


    } 
    yield return new WaitForSeconds (.1f); 
    Debug.Log (name.ToString()); 

} 

は、これは私のコードです。問題であると想定されるのは?ありがとう!

+1

は、私はあなたの問題が何であるか知らないが、私はあなたをお勧めします[C#の基本データ型](https://www.tutorialspoint.com/csharp/csharp_data_types.htm)を読んで理解してください。 *あなたが 'string'を' string'に変換するのを見たとき、私の目は疲れていましたが、これはまったく必要ありません。あなたはこの小さな** ButtonClicked関数でこれを** ** **回実行しました。これは 'ToString()'関数を使うときに起こります。 'string'型で' ToString() 'を呼び出さないでください。 – Programmer

+0

ButtonClickedはいつ実行されますか? ButtonClickedをその名前のonDownloadClickのリスナーを実行するたびに実行します。私はあなたがボタンをクリックしてから値を変更し、ダウンロード値としてButtonClickedを最後に実行したときの名前を取得すると推測しています。 – Maakep

+0

これを修正するには、addListenerを1回だけ実行し、ダウンロードメソッドでprodName.textを取得する必要があります。 – Maakep

答えて

0

Button.onClickButtonClickedEventです。これは「リスナー」を保持し、それが通知されたとき(つまり所有者UnityEngine.UI.Buttonがクリックされたとき)に呼び出されます。 「リスナー」のリストは、決して退会しなければビルドされます。あなただけAddListenerを経由してリストに追加している:

downloadButton.onClick.AddListener (() => StartCoroutine (onDownloadClick (name2.ToString()))); 

は次のように新しいリスナーを追加する前にButtonClickedEventオブジェクトをクリアしてみてください。

downloadButton.onClick.RemoveAllListeners(); 
downloadButton.onClick.AddListener (() => StartCoroutine (onDownloadClick (name2.ToString()))); 
+1

ありがとうございました! – Sarah

+0

@Sarah助けて嬉しいです。これで問題が解決した場合は、それを回答として選択して問題が解決済みとマークされます。 – Foggzie

関連する問題