Приложение вылетает при нажатии кнопки без достижения события нажатия - PullRequest
0 голосов
/ 23 апреля 2019

В своем приложении для Android Studio я разработал экран (не используя XML, а в режиме разработки).Я установил атрибут одной из моих кнопок на public method в классе.

Это моя кнопка

Установка атрибута onClick

enter image description here

Код класса формы

package com.example.my_test_app;

import android.content.ContentValues;
import android.content.DialogInterface;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class ftpDetails extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_ftp_details);
    setTitle(R.string.ftpTitle);
}

public void saveFTPSettings(View v) {

    // Set controls
    Button btn = (Button) v;
    TextView txtServer = (TextView) findViewById(R.id.txtServer);
    TextView txtFolder = (TextView) findViewById(R.id.txtFolder);
    TextView txtUsername = (TextView) findViewById(R.id.txtUsername);
    TextView txtPassword = (TextView) findViewById(R.id.txtPassword);

    // Check that all text boxes have a value in them
    if (txtServer.getText().length() == 0)
    {
        // MESSAGE BOX
        AlertDialog.Builder msg = new AlertDialog.Builder(this);
        msg.setTitle("Enter Server");
        msg.setMessage("Please enter a server address.");
        msg.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // Leave this blank, this will mean nothing happens, the msg just disappears
            }
        });
    }

    if (txtFolder.getText().length() == 0)
    {
        // MESSAGE BOX
        AlertDialog.Builder msg = new AlertDialog.Builder(this);
        msg.setTitle("Enter Folder");
        msg.setMessage("Please enter a folder to use.");
        msg.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // Leave this blank, this will mean nothing happens, the msg just disappears
            }
        });
    }

    if (txtUsername.getText().length() == 0)
    {
        // MESSAGE BOX
        AlertDialog.Builder msg = new AlertDialog.Builder(this);
        msg.setTitle("Enter Username");
        msg.setMessage("Please enter your username.");
        msg.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // Leave this blank, this will mean nothing happens, the msg just disappears
            }
        });
    }

    if (txtPassword.getText().length() == 0)
    {
        // MESSAGE BOX
        AlertDialog.Builder msg = new AlertDialog.Builder(this);
        msg.setTitle("Enter Server");
        msg.setMessage("Please enter a your password.");
        msg.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // Leave this blank, this will mean nothing happens, the msg just disappears
            }
        });
    }



    //MyDBHandler dbHandler = new MyDBHandler();
    //String _filePath = this.getFilesDir().toString() + "/";

    //SQLiteDatabase _db = SQLiteDatabase.openDatabase(_filePath + dbHandler.DATABASE_NAME, null, 0);

    //ContentValues initialValues = new ContentValues(4);
    //initialValues.put(dbHandler.COLUMN_FTP_SERVER, txtServer.getText().toString());
    //initialValues.put(dbHandler.COLUMN_FTP_FOLDER, txtFolder.getText().toString());
    //initialValues.put(dbHandler.COLUMN_FTP_USERNAME, txtUsername.getText().toString());
    //initialValues.put(dbHandler.COLUMN_FTP_PASSWORD, txtPassword.getText().toString());

    //_db.insert(dbHandler.TABLE_FTP, null, initialValues);

}

} ​​

Я установил точку останова на Button btn = (Button) v.Однако, когда я нажимаю кнопку, точка останова не срабатывает, приложение просто закрывается.

Это то, что я получаю в окне отладки в Android Studio

E / libc: доступ запрещен при поиске свойства "vendor.debug.egl.swapinterval" W / RenderThread: type =Аудит 1400 (0.0: 1269): avc: отказано {прочитано} для имени = "u: object_r: vendor_default_prop: s0" dev = "tmpfs" ino = 22761 scontext = u: r: untrusted_app: s0: c129, c256, c512,c768 tcontext = u: object_r: vendor_default_prop: s0 tclass = файл разрешен = 0 D / AndroidRuntime: выключение виртуальной машины W / RenderThread: type = 1400 аудит (0.0: 1270): avc: отказано {чтение} для имени = "u: object_r: vendor_default_prop: s0 "dev =" tmpfs "ino = 22761 scontext = u: r: untrusted_app: s0: c129, c256, c512, c768 tcontext = u: object_r: vendor_default_prop: s0 tclass = доступ к файлу = 0 E / libОтказано в поиске свойства "vendor.debug.egl.swapinterval" W / RenderThread: type = 1400 аудит (0.0: 1271): avc: отклонено {read} для name = "u: object_r: vendor_default_prop: s0" dev = "tmpfs" ino= 22761 scontext = u: r: ненадежный_app: s0: c129, c256, c512, c768 tcontext = u: object_r: vendor_default_prop: s0 tclass = файлpermissive = 0 E / libc: доступ запрещен при поиске свойства "vendor.debug.egl.swapinterval" W / RenderThread: type = 1400 аудит (0.0: 1272): avc: отказано {чтение} для имени = "u: object_r: vendor_default_prop:s0 "dev =" tmpfs "ino = 22761 scontext = u: r: untrusted_app: s0: c129, c256, c512, c768 tcontext = u: object_r: vendor_default_prop: s0 tclass = файл permissive = 0 E / libc: доступ к запрещенному файлу поиска"vendor.debug.egl.swapinterval" E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной Процесс: com.example.my_test_app, PID: 8293 java.lang.IllegalStateException: Не удалось найти метод saveFTPSettings (View) в контексте родителя или предка для AndroidАтрибут: onClick, определенный в классе представления.AppCompatViewInflater $ DeclaredOnClickListener.onClick (AppCompatViewInflater.java:381) на android.view.View.performClick (View.java:6669) на андроиде.view.View.performClickInternal (View.java:6638) на android.view.View.access $ 3100 (View.java:789) на android.view.View $ PerformClick.run (View.java:26145) на android.os.Handler.handleCallback (Handler.java:873) в android.os.Handler.dispatchMessage (Handler.java:99) в android.os.Looper.loop (Looper.java:193) в android.app.ActivityThread.main (ActivityThread.java: 6863) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:537) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858) W / RenderThread: type = 1400 аудит (0.0: 1273): avc: отклонено {read} для name = "u: object_r: vendor_default_prop: s0" dev = "tmpfs" ino = 22761 scontext= u: r: untrusted_app: s0: c129, c256, c512, c768 tcontext = u: object_r: vendor_default_prop: s0 tclass = file permissive = 0 E / libc: доступ запрещен, поиск свойства "vendor.debug.egl.swapinterval" I /chatty: uid = 10129 (com.example.my_test_app) RenderThread, идентичный 1 строке E / libc: доступ запрещен при поиске свойства "vendor.debug.egl.swapinterval "W / OPDiagnose: getService: OPDiagnoseService NULL E / libc: свойство поиска не разрешено" vendor.debug.egl.swapinterval "I / chatty: uid = 10129 (com.example.my_test_app) RenderThread идентичный 3линииE / libc: Доступ запрещен при поиске свойства "vendor.debug.egl.swapinterval" D / OSTracker: Событие ОС: сбой I / Процесс: отправка сигнала.PID: 8293 SIG: 9 Отключен от целевой виртуальной машины, адрес: «localhost: 8600», транспорт: «сокет»

Почему мое приложение закрывается, когда я нажимаю кнопку?Я могу печатать в текстовые поля нормально, просто нажмите кнопку, чтобы закрыть его.

1 Ответ

0 голосов
/ 23 апреля 2019

У меня была такая же проблема, и в моем случае я изменил Button в XML на android.support.v7.widget.AppCompatButton, и это сработало.

измени

<Button
        .... />

на

<android.support.v7.widget.AppCompatButton
        .... />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...