我是第一次使用Unity。
我正在制作一个可以在Android平台上运行的应用程序。
我犯了一个脚本来添加一个按钮。该界面具有文本输入字段,用于添加组的名称。写一些名称和命中一个按钮(adicionar)后,应在文本字段(名为textoGrupo)添加名字。它还将启用第二个按钮(名为seguinte),自脚本开始执行以来将被禁用。我还有另一个文本字段(textoElementoRepetido),仅当重复输入的名称时才应具有文本。
它正常工作,当我在统一进行了测试。但是,当我测试了我的Android设备上什么都不做的对剧本什么的。
这是我的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Data;
using Mono.Data.SqliteClient;
using TMPro;
using System.IO;
public class grupo : MonoBehaviour
{
List<string> elementos = new List<string>();
private IDbConnection connection;
private IDbCommand command;
string dbFile;
int idGrupo = 0;
public TMP_InputField input;
public TMP_Text textoGrupo;
public TMP_Text textoElementoRepetido;
public Button seguinte;
// Start is called before the first frame update
IEnumerator Start()
{
// Ligação à base de dados
string filepath = Application.persistentDataPath + "/TVdatabase.db";
if (!File.Exists(filepath))
{
// if it doesn't ->
// open StreamingAssets directory and load the db ->
WWW loadDB = new WWW("jar:file://" + Application.dataPath + "!/assets/TVdatabase.db"); // this is the path to your StreamingAssets in android
while (!loadDB.isDone)
{
yield return new WaitForSeconds(30);
} // CAREFUL here, for safety reasons you shouldn't let this while loop unattended, place a timer and error check
// then save to Application.persistentDataPath
File.WriteAllBytes(filepath, loadDB.bytes);
}
//open db connection
connection = new SqliteConnection("URI=file:" + filepath);
seguinte.interactable = false;
}
public void AdicionaElemento( )
{
if (input.text != null && input.text != "")
{
string sql;
//se ainda não existirem elementos no grupo, é criado na base de dados um grupo e o seu id é guardado
if (elementos.Count == 0)
{
command = connection.CreateCommand();
connection.Open();
sql = "INSERT INTO Grupo(idAvatar) VALUES(1);";
command.CommandText = sql;
command.ExecuteNonQuery();
sql = "SELECT MAX(idGrupo) FROM GRUPO;";
command.CommandText = sql;
IDataReader reader = command.ExecuteReader();
while (reader.Read())
{
idGrupo = reader.GetInt32(0);
}
connection.Close();
}
string elemento = input.text.ToString();
if (!elementos.Contains(item: elemento))
{
textoElementoRepetido.text = "";
command = connection.CreateCommand();
connection.Open();
sql = "INSERT INTO Elemento(nomeElemento, idGrupo) VALUES('" + elemento + "', " + idGrupo + ");";
command.CommandText = sql;
command.ExecuteNonQuery();
connection.Close();
if (elementos.Count == 0)
{
textoGrupo.text += elemento;
}
else
{
textoGrupo.text += ", " + elemento;
}
elementos.Add(elemento);
seguinte.interactable = true;
input.text = "";
}
else
{
textoElementoRepetido.text = "Essa pessoa já faz parte do teu grupo!";
}
}
else{
seguinte.interactable = false;
}
}
// Update is called once per frame
void Update()
{
}
}
我希望我写了足够多的内容来理解此屏幕的目的。这是我附加到按钮adicionar什么。
如果首先在onClick()事件上尝试过此操作。没用因此,我在触发器上进行了尝试。结果相同。
我不知道为什么在统一编辑器上不能使用它,但在我的Android设备上却不能使用。
当我按一下按钮adicionar一丝不挂脚本运行的文本输入字段。所以我的猜测是真正的问题是与数据库的连接。
我使得数据库连接时错过了一些步骤。我正在关注this。但这仍然行不通。
我的数据库文件名为TVbatabase.db