Unity按钮禁用在Android设备上不起作用(我认为数据库问题)

时间:2019-01-29 21:41:23

标签: android database sqlite unity3d

我是第一次使用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什么。

attached on button

如果首先在onClick()事件上尝试过此操作。没用因此,我在触发器上进行了尝试。结果相同。

我不知道为什么在统一编辑器上不能使用它,但在我的Android设备上却不能使用。

当我按一下按钮adicionar一丝不挂脚本运行的文本输入字段。所以我的猜测是真正的问题是与数据库的连接。

我使得数据库连接时错过了一些步骤。我正在关注this。但这仍然行不通。

我的数据库文件名为TVbatabase.db

0 个答案:

没有答案