public void onClick(View v) {
        Level1 ob = new Level1();
        ob.checkAns();
        int id = v.getId();
        String typed = ans.getText().toString();

        String resourceName = getResources().getResourceEntryName(id);
        ans.setText(typed + resourceName);


//      String check =ans.getText().toString();
//
//      if(check.equalsIgnoreCase("ABC")){
//          Toast.makeText(Level1.this, "correct" ,Toast.LENGTH_SHORT).show();
//      }
//      else {
//          Toast.makeText(Level1.this, "NO" ,Toast.LENGTH_SHORT).show();
//      }
//  }

Данный код - мой метод onClick (). Комментируемая область - это часть, для которой я хочу создать метод. вот так:

public  void checkAns() {
        String check =ans.getText().toString();

        if(check.equalsIgnoreCase("ABC")){
            Toast.makeText(Level1.this, "correct" ,Toast.LENGTH_SHORT).show();
        }
        else {
            Toast.makeText(Level1.this, "NO" ,Toast.LENGTH_SHORT).show();
        }
    }

, и я хочу вызвать это в моем методе onClick, как показано в методе onClick (), т.е.

`public void onClick(View v) {
        Level1 ob = new Level1();
        ob.checkAns();....

Level1 - это имя моего класса. Мой вопрос в том, что когда я вызываю метод checkAns () из onClick () и нажимаю любую кнопку, мое приложение останавливается и когда я использую тот же код checkAns () в коде onClick () и удаляю оператор вызова checkAns (), приложение работает нормально. Надеюсь, мои проблемы понятны. помогите пожалуйста.

ОБНОВЛЕНИЕ: мой класс Level1.

    package com.example.letsguesssomething;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

public class Level1 extends Activity implements OnClickListener{


    ImageButton A,B,C,D,E,F,G,H,I,J;
    TextView ans;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_level1);

        A = (ImageButton) findViewById(R.id.A);
        B = (ImageButton) findViewById(R.id.B);
        C = (ImageButton) findViewById(R.id.C);
        D = (ImageButton) findViewById(R.id.D);
        E = (ImageButton) findViewById(R.id.E);
        F = (ImageButton) findViewById(R.id.F);
        G = (ImageButton) findViewById(R.id.G);
        H = (ImageButton) findViewById(R.id.H);
        I = (ImageButton) findViewById(R.id.I);
        J = (ImageButton) findViewById(R.id.J);
        ans = (TextView) findViewById(R.id.ans);
        A.setOnClickListener(this);
        B.setOnClickListener(this);
        C.setOnClickListener(this);
        D.setOnClickListener(this);
        E.setOnClickListener(this);
        F.setOnClickListener(this);
        G.setOnClickListener(this);
        H.setOnClickListener(this);
        I.setOnClickListener(this);
        J.setOnClickListener(this);

    }



    @Override
    public void onClick(View v) {
        //Level1 ob = new Level1();
        //ob.checkAns();
        int id = v.getId();
        String typed = ans.getText().toString();

        String resourceName = getResources().getResourceEntryName(id);
        ans.setText(typed + resourceName);


        String check =ans.getText().toString();

        if(check.equalsIgnoreCase("ABC")){
            Toast.makeText(Level1.this, "correct" ,Toast.LENGTH_SHORT).show();
        }
        else {
            Toast.makeText(Level1.this, "NO" ,Toast.LENGTH_SHORT).show();
        }
    }



    }
public  void checkAns() {
    String check =ans.getText().toString();

    if(check.equalsIgnoreCase("ABC")){
        Toast.makeText(Level1.this, "correct" ,Toast.LENGTH_SHORT).show();
    }
    else {
        Toast.makeText(Level1.this, "NO" ,Toast.LENGTH_SHORT).show();
    }
}

}

cute programmer

Ответов: 2

Ответы (2)

Для правильного ответа вы должны предоставить трассировку вашего вопроса. Возможно, проблема связана с переменной ans, используемой в ans.getText (). Вы проверяли, присвоено ли ему ненулевое значение?

Кстати, ваш класс Level1 является расширением класса Activity? Потому что вы используете Level1.this в качестве контекста для Toast. В этом случае проблема может заключаться в вашем способе инициализации объекта Level1. Создание экземпляров Activity с помощью конструктора не является обычным явлением.

РЕДАКТИРОВАТЬ:

Дело в том, что вы никогда не должны создавать объект действия внутри класса активности, как вы это делали в Leve1 ob = new Level1 (). Вы можете заменить

Level1 ob = new Level1();
ob.checkAns();

с

checkAns();

и перемещают функцию checkAns в свой класс активности, а не из него. поскольку checkAns () - это метод вашего класса Level1, вы можете вызывать его где угодно в своих нестатических функциях класса, которые, конечно, включают метод onClick.

Код ниже должен работать нормально.

public class Level1 extends Activity implements OnClickListener{

    ImageButton A,B,C,D,E,F,G,H,I,J;
    TextView ans;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_level1);

        A = (ImageButton) findViewById(R.id.A);
        B = (ImageButton) findViewById(R.id.B);
        C = (ImageButton) findViewById(R.id.C);
        D = (ImageButton) findViewById(R.id.D);
        E = (ImageButton) findViewById(R.id.E);
        F = (ImageButton) findViewById(R.id.F);
        G = (ImageButton) findViewById(R.id.G);
        H = (ImageButton) findViewById(R.id.H);
        I = (ImageButton) findViewById(R.id.I);
        J = (ImageButton) findViewById(R.id.J);
        ans = (TextView) findViewById(R.id.ans);
        A.setOnClickListener(this);
        B.setOnClickListener(this);
        C.setOnClickListener(this);
        D.setOnClickListener(this);
        E.setOnClickListener(this);
        F.setOnClickListener(this);
        G.setOnClickListener(this);
        H.setOnClickListener(this);
        I.setOnClickListener(this);
        J.setOnClickListener(this);

    }



    @Override
    public void onClick(View v) {
        int id = v.getId();
        String typed = ans.getText().toString();

        String resourceName = getResources().getResourceEntryName(id);
        ans.setText(typed + resourceName);

        checkAns();

    }



    public  void checkAns() {
        String check =ans.getText().toString();
        if(check.equalsIgnoreCase("ABC")){
            Toast.makeText(Level1.this, "correct" ,Toast.LENGTH_SHORT).show();
        }
        else {
            Toast.makeText(Level1.this, "NO" ,Toast.LENGTH_SHORT).show();
        }
    }
}

Note1:
Если вы используете всю логику в нашем классе Level1, зачем инициализировать объект того же класса и вызывать метод ??? Вы можете напрямую позвонить checkAns ()

Level1 ob = new Level1();
ob.checkAns();

Примечание 2: Вы инициализировали текст редактирования в onCreate ()?

EditText ans;
ans=(EditText)findViewById(....);


Это будет работать: activity_main.xml выглядит следующим образом


        

Код активности:

class MainActivity extends AppCompatActivity implements  View.OnClickListener{
ImageButton btn;
    TextView txt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn=(ImageButton)findViewById(R.id.imgBtn);
        btn.setOnClickListener(this);
        txt=(TextView)findViewById(R.id.txtView);
}
@Override
    public void onClick(View v) {
        if(v.getId()== R.id.imgBtn){
            check(v.getId());
        }
    }
    private void check(int id){
        String resourceName = getResources().getResourceEntryName(id);
        String typed = txt.getText().toString();
        txt.setText(id+resourceName);
        Toast.makeText(this,"test",Toast.LENGTH_SHORT).show();
    }
}

2022 WebDevInsider