30/09/2018, 17:04

Lỗi Unfortunately,application has stopped. khi run app android?

Mình mới học Java/Android có làm demo app chuyển đổi các giá trị đo lường,mới làm được với nhiệt độ thì có lỗi xử lý event button,đây là code ở layout và activity của mình :

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rlPanel"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff008200"
    tools:context=".MainActivity">


    <TextView
        android:id="@+id/tvTempPanel"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Convert Temperature"
        android:gravity="center"
        android:textSize="36dp"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="30dp"/>


    <EditText
        android:id="@+id/etTemp"
        android:layout_below="@+id/tvTempPanel"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:text=""
        android:gravity="center_horizontal"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textColorHint="#ffff8d75"/>
    <RadioGroup
        android:id="@+id/radioGroup"
        android:layout_below="@+id/etTemp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:orientation="vertical">

        <RadioButton
            android:id="@+id/rbtnF"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Fehrenheit to Celcius"/>

        <RadioButton
            android:id="@+id/rbtnC"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Celcius to Fehrenheit"/>

    </RadioGroup>

    <LinearLayout
        android:id="@+id/layout2Temp"
        android:layout_below="@+id/radioGroup"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="30dp"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btnConvert"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Convert"/>

        <Button
            android:id="@+id/btnClear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Clear"/>

    </LinearLayout>

    <TextView
        android:id="@+id/tvTempResult"
        android:layout_below="@+id/layout2Temp"
        android:layout_marginTop="30dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:gravity="center"
        android:textSize="24dp"/>

</RelativeLayout>

và activity :

package com.example.legend.myapplication;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity {

    private Button btnConvert,btnClear;
    private EditText etTemp;
    private RadioButton tempF,tempC;
    private TextView tvTempResult;

    private View.OnClickListener myVarListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(v==btnConvert){
                if(etTemp.getText()!=null){
                    if(tempF.isChecked()){
                        float f=Float.parseFloat(etTemp.getText().toString());
                        float c=(f-32)*(float)5/9;
                        tvTempResult.setText(String.valueOf(f) +" Fehrenheit = "+String.valueOf(c)+ " Celcius");
                    }
                    else if(tempC.isChecked()){
                        float c=Float.parseFloat(etTemp.getText().toString());
                        float f=c*(float)9/5 +32;
                        tvTempResult.setText(String.valueOf(c) +" Celcius = "+String.valueOf(f)+ " Fehrenheit");
                    }
                    else {
                        Toast.makeText(MainActivity.this,"Please mark an unit",Toast.LENGTH_LONG).show();
                    }
                }else {
                    Toast.makeText(MainActivity.this,"Please input data",Toast.LENGTH_LONG).show();
                }

            }else{
                etTemp.setText("");
                etTemp.requestFocus();
            }
        }

    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnConvert=(Button)findViewById(R.id.btnConvert);
        btnClear=(Button)findViewById(R.id.btnClear);
        etTemp=(EditText)findViewById(R.id.etTemp);
        tempF=(RadioButton)findViewById(R.id.rbtnF);
        tempC=(RadioButton)findViewById(R.id.rbtnC);
        tvTempResult=(TextView)findViewById(R.id.tvTempResult);
        btnConvert.setOnClickListener(myVarListener);
        btnClear.setOnClickListener(myVarListener);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

nếu như để ở editText null và mark vào 1 radio button thì có lỗi xảy ra,mình nghĩ là nó ko thực thi được ở lệnh else(etTemp.getText()==null) nhưng không biết xử lý sao cả,mong mọi người chỉ giúp.

Nguyễn Minh Dũng viết 19:11 ngày 30/09/2018

thì có lỗi xảy ra

Tiêu đề không rõ ràng mà câu hỏi cũng không rõ ràng. @Nguyen_Anh_Dung nên nói rõ là lỗi gì thì mới dễ giúp.

Đồng thời sửa lại tiêu đề nhé.

Nguyễn Anh Dũng viết 19:11 ngày 30/09/2018

Đã sửa anh
khi run chương trình mình ko nhập liệu vào ô EditText ,mark vào 1 RadioButton và click vào Button Convert thì có Message Box thông báo lỗi Unffotunately,My Application has stopped,và emulator tự đóng .

Nguyễn Anh Dũng viết 19:12 ngày 30/09/2018

trong xml e khai báo EditText có content=null,nhưng ở activity dù mình có nhập liệu hay không nhập liệu thì nó vẫn đi vào lệnh if(etTemp.getText() != null) ??

... viết 19:19 ngày 30/09/2018

if(etTemp.getText()!=null){

stackoverflow hướng dẫn get text from editText như thế này:


how to get text from EditText

EditText text = (EditText)findViewById(R.id.vnosEmaila);
String value = text.getText().toString(); <<<<<<<<<

Em chưa học java, nhưng em nghĩ ngôn ngữ nào cũng vậy thôi, hàm get Text trả về string thì nên so sánh với string rỗng chứ không nên so sánh với null.
Ví dụ thế này:

if(etTemp.getText().toString() != "")
Nguyễn Anh Dũng viết 19:12 ngày 30/09/2018

Mình test thử hết các phương thức đó rồi nhưng vẫn không có gì khác biệt

TTmagic viết 19:08 ngày 30/09/2018

thế bạn thử try catch chưa

Nguyễn Anh Dũng viết 19:06 ngày 30/09/2018

if(etTemp.getText().toString().equals("") nó mới xử lý được

Tâm Ninja viết 19:18 ngày 30/09/2018

ba vấn đề với topic của bạn xin được góp ý.
I.Bạn nên học lại về cách debug trước khi thực hiện code. Nếu bạn không thể debug thì làm sao để tư gỡ lỗi? Như thế thì gặp vấn đề gì cũng phải hỏi sẽ rất mất thời gian và khó để học những cái cao hơn được.
Trong Adroid có hai loại lỗi là [Lỗi Unfortunately,application has stopped] và [No response]. Nó chỉ phản ánh hai cách thức hệ điều hành phản ứng với app của bạn. Đặt tiêu đề kiểu này có cũng như không.

II.Bạn nên xóa bớt các phần code thừa cho dễ đọc.

III.etTemp.getText() nó ra là char-sequence không phải String. Cách tốt nhất để check rỗng là dùng gói TextUtil của Java như sau:

TextUtil.isEmpty(etTemp.getText().toString())
TextUtil.isEmpty(String.valueOf(etTemp.getText())) 

Gợi mở với bạn một chút là trong hai dòng lệnh trên thì cái nào với bạn sẽ tốt hơn và tại sao? He he…

Bài liên quan
0