验证EditText是否为空Android Studio

时间:2018-05-04 11:57:56

标签: java android android-edittext

我有点陷入这种状况,不知道该怎么做。 如果用户未将值插入true,我需要它返回falseEditText。实际上应用程序崩溃并关闭。

  

Eíípessoal,preciso de ajuda .. Preciso verificar seousuáriodeixouo EditText(number)em branco quando clicounobotoôsese isso aconteceu,mostra um erroendãorecontina,masdáerroe fecha o app quando essa诽谤性的。

campoBNow = findViewById(R.id.txtMenorBNow);
campoLucro = findViewById(R.id.txtLucro);

btnClicou.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        //Pega o texto do BuyNow e Lucro e coloca nas variáveis de texto.
        String pegaBNow = campoBNow.getText().toString();
        String pegaLucro = campoLucro.getText().toString();
        String item = spNivel.getSelectedItem().toString(); //Atribui o ComboBox para String...

        //Atribui o valor dos textos convertidos pra float nas variáveis float.
        double bNow = Double.parseDouble(pegaBNow);
        double lDes = Double.parseDouble(pegaLucro);

/*
        Condicional de verificação vazio...
*/

        if(TextUtils.isEmpty(pegaBNow)){
            tv5.setText("DIGITE UM VALOR DE BUY NOW"); //BuyNow vazio, mostra mensagem...
            //Toast.makeText(getApplicationContext(), "DIGITE UM VALOR DE BUY NOW", Toast.LENGTH_LONG ).show();
        } else if(TextUtils.isEmpty(pegaLucro)){
            tv5.setText("DIGITE UM VALOR DE LUCRO"); //Lucro vazio, mostra mensagem...
            //Toast.makeText(getApplicationContext(), "DIGITE UM VALOR DE LUCRO", Toast.LENGTH_LONG ).show();
        } else if(TextUtils.isEmpty(pegaBNow) && TextUtils.isEmpty(pegaLucro)){
            //Toast.makeText(getApplicationContext(), "DIGITE OS VALORES", Toast.LENGTH_LONG ).show();
        }else{
            //Atribui o valor dos textos convertidos pra float nas variáveis float.
            double res = ((bNow - (0.05*bNow)) - lDes); //Calcula o resultado...
            if(res < 0){
                tv5.setText("PROPORÇÃO LUCRO E BUY NOW INCORRETO");
                Toast.makeText(getApplicationContext(), "PROPORÇÃO INCOMPATÍVEL!", Toast.LENGTH_LONG).show();
            }else {
                //Início do IF para o nível da carta...
                if (item == "Ouro") {
                    if (res > 0 && res <= 5000) { //Começar a condicional de comparação de valor.
                        tv5.setText("O RISCO DO TRADE É BAIXO");
                    } else if (res > 5000 && res <= 15000) {
                        tv5.setText("O RISCO DO TRADE É MÉDIO");
                    } else {
                        tv5.setText("O RISCO DO TRADE É ALTO");
                    }


                } else if (item == "Prata") {
                    if (res > 0 && res <= 2000) {
                        tv5.setText("O RISCO DO TRADE É BAIXO");
                    } else if (res > 2000 && res <= 5000) {
                        tv5.setText("O RISCO DO TRADE É MÉDIO");
                    } else {
                        tv5.setText("O RISCO DO TRADE É ALTO");
                    }

                } else { //else para Bronze.
                    if (res > 0 && res <= 1000) {
                        tv5.setText("O RISCO DO TRADE É BAIXO");
                    } else if (res > 1000 && res <= 3000) {
                        tv5.setText("O RISCO DO TRADE É MÉDIO");
                    } else {
                        tv5.setText("O RISCO DO TRADE É ALTO");
                    }

                }
                //Fim do IF para o nível da carta...
            }

            //tv4.setText("COMPRE O JOGADOR POR ATÉ: " + res + " COINS");
            //tv5.setText("RISCO");
        }
    }
});

4 个答案:

答案 0 :(得分:1)

移动线

        double bNow = Double.parseDouble(pegaBNow);
        double lDes = Double.parseDouble(pegaLucro);

到最后的其他部分(在检查字符串空条件后起作用)

trying to get double value before checking 字符串是否为空。

如果为空,则parseDouble()会抛出 NumberFormatException ,这就是应用崩溃的原因。

答案 1 :(得分:0)

使用“for”循环。

private boolean validate(EditText[] fields){
    for(int i = 0; i < fields.length; i++){
        EditText edtTxtName= fields[i];
        if(edtTxtName.getText().toString().length() <= 0){
            return false;
        }
    }
    return true;
}

并使用如下方法:

boolean checkField= validate(new EditText[] { campoBNow, campoLucro })
如果所有字段都非空,

将返回true。

答案 2 :(得分:0)

我认为你的应用程序崩溃是因为parseDouble()无法解析空语句(如果文本框中没有任何内容)。您将在调试模式中看到它。

在parseDouble()之前检查文本框中的值:

if (pegaBNow <= 0 or pegaLucro <= 0) {
   'Emtpy Text -> do sth. but no Parse
} else {
   double bNow = parseDouble(pegaBNow);
   double lDes = parseDouble(pegaLucro);
}

另外,请检查用户是否输入了有效的号码。

答案 3 :(得分:-1)

class BookTimeViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { var priceTime: [PriceTime] = [] let curTime = Date() lazy var hourTimeFormatter: DateFormatter = { let formatter = DateFormatter() formatter.dateFormat = "HH" return formatter }() override func viewDidLoad() { super.viewDidLoad() getDataFromBackend() } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return priceTime.count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "timeCell", for: indexPath) as! BookTimeCell cell.timeLabel.text = "\(priceTime[indexPath.item].time):00" cell.priceLabel.text = "\(priceTime[indexPath.item].price) руб." return cell } func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool { // I think on this i should close the time } func getDataFromBackend() { MBProgressHUD.showAdded(to: self.view, animated: true) let newDate = dateFormatter.date(from: selectedDate) let dateForURL = dateTimeFormatter.string(from: newDate!) let url = URL(string: "https:....") var request = URLRequest(url: url!) request.httpMethod = "GET" let task = URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in if let err = error { print(err) } else { do { if let jsonResult = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any] { if let prices = jsonResult["prices"] as? [[String: Int]]{ for price in prices { self.priceTime.append(PriceTime(price)) } } } DispatchQueue.main.async { self.collectionView.reloadData() MBProgressHUD.hide(for: self.view, animated: true) } } catch { print("error") } } }) task.resume() } } 应该可以正常工作,如果应用程序仍然崩溃,您可以使用debug来了解崩溃的原因和位置。