Android программа перестала работать, как только была нажата кнопка - PullRequest
0 голосов
/ 18 июня 2020

Я новичок в создании приложений Android, но могу понять java. Программа, которую я делаю, должна возвращать относительную частоту символов, которые находятся в тексте, который человек напишет в программе (вводимый текст должен быть записан в поле EditText с идентификатором inputText, и как только человек нажмет кнопку с id continueButton, onClick программа должна продолжить работу с методом onClickFindRelevancy). Код мне кажется нормальным, но проблема все еще возникает. Я могу ввести текст, но как только я нажимаю кнопку, приложение перестает работать, и я просто не могу понять, что не так ... Что мне нужно изменить в коде (что не так), чтобы программа выполняла то, что задумано?

Я действительно пытался найти решение моей проблемы, но не нашел ничего похожего на меня (просто просмотрел фрагменты кода, с которыми у кого-то были проблемы), поэтому Надеюсь, что этот топи c не закроется, потому что я пробовал и толком не нашел решения. Уже некоторое время пытаюсь.

MainActivity. java

package com.example.<theprogrammnameihave>;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.EditText;

import java.util.Map;
import java.util.TreeMap;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void  onClickFindRelevancy(View view)
    {
        EditText inputText = (EditText) findViewById(R.id.inputText);
        String input = inputText.getText().toString();
        TextView result = (TextView) findViewById(R.id.result);

        Map<Character, Float> k = new TreeMap<Character, Float>();
        for (char b : input.toCharArray()) {
            if (k.containsKey(b)) {
                k.put(b, k.get(b) + 1);
            }
            else {
                k.put(b, 1f);
            }
        }

        for (char b : input.toCharArray()) {
            float freq = k.get(b) / input.length();
            result.setText(getString(b) + " " + freq);
        }
    }
}

activity_main. xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/greetingText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/greeting_message"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.109" />

    <Button
        android:id="@+id/continueButton"
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        android:layout_marginStart="136dp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="137dp"
        android:layout_marginBottom="340dp"
        android:onClick="onClickFindRelevancy"
        android:text="@string/button_send"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/inputText" />

    <EditText
        android:id="@+id/inputText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="100dp"
        android:layout_marginTop="10dp"
        android:layout_marginEnd="101dp"
        android:layout_marginBottom="191dp"
        android:ems="10"
        android:hint="@string/edit_message"
        android:inputType="textPersonName"
        app:layout_constraintBottom_toTopOf="@+id/continueButton"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/greetingText" />

    <TextView
        android:id="@+id/result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="205dp"
        android:layout_marginTop="418dp"
        android:layout_marginEnd="206dp"
        android:layout_marginBottom="294dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

AndroidManifest. xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.<theprogrammnameihave>">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Ошибка, которую я получаю, когда приложение перестает работать -

D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.kriptoprogramma, PID: 13645
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:402)
        at android.view.View.performClick(View.java:6256)
        at android.view.View$PerformClick.run(View.java:24701)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:397)
        at android.view.View.performClick(View.java:6256) 
        at android.view.View$PerformClick.run(View.java:24701) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6541) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
     Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x54
        at android.content.res.Resources.getText(Resources.java:338)
        at android.content.res.Resources.getString(Resources.java:432)
        at android.content.Context.getString(Context.java:556)
        at com.example.kriptoprogramma.MainActivity.onClickFindRelevancy(MainActivity.java:36)
        at java.lang.reflect.Method.invoke(Native Method) 
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:397) 
        at android.view.View.performClick(View.java:6256) 
        at android.view.View$PerformClick.run(View.java:24701) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6541) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

1 Ответ

1 голос
/ 18 июня 2020

Вы должны использовать трассировку стека ошибок, как предложено в комментариях. См. эту ссылку .

Ошибка в том, что вы используете метод getString для преобразования char в String. В Android это метод ActivityContext) для получения строки из ресурсов (т.е. когда вы локализуете свое приложение).

Вместо этого вы должны использовать String.valueOf(char).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...