Re: Щелчок кнопки/Счётчик ворон

NeferSky wrote:

kirill_nn,
1. Оба счетчика у Вас увеличиваются, очевидно, потому что инкремент выполняете при присвоении текста в textView. Если я правильно Вас понял, при нажатии кнопки Вам нужно сначала увеличить счетчик, а потом присвоить текст со значениями счетчиков в textView. Сделать это можно как в приведенном примере. Обратите внимание, что инкременты ++mCountCat и ++mCount выполняется в обработчиках нажатий кнопок независимо друг от друга, а присвоение текста вынесено в отдельную функцию showCounters(), и инкремент в ней не выполняется.

2. По второму вопросу непонятно - что именно у Вас плавает?

Спасибо за подсказку
По второму плавали кнопки, но уже разобрался

Re: Щелчок кнопки/Счётчик ворон

Здравствуйте, почему-то у mCrowsCounterButton нет метода setOnClickListener (горит красным), пришлось делать отдельный метод:
public class MainActivity extends AppCompatActivity {
    private Button mCrowsCounterButton;
    private int mCount = 0;
    TextView helloTextView = findViewById(R.id.TextView);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mCrowsCounterButton = findViewById(R.id.button2);
    }

    public void onClick(View view) {
       
        helloTextView.setText("КАКИЕ КОРАБЛИ??!");
    }


    public void onClick2(View view) {

        helloTextView.setText("у меня получилось "+ ++mCount+ " ворон");
    }
}

Re: Щелчок кнопки/Счётчик ворон

А вы копировали или писали вручную? Пишите ручками и испльзуйте подсказки студии. Должно получиться.

54 (edited by deerhunter9136 2017-10-28 21:46:24)

Re: Щелчок кнопки/Счётчик ворон

Ошибся расположением, все получилось, спасибо.

Re: Щелчок кнопки/Счётчик ворон

Здравствуйте, Александр!
Прошу прощения, если глупый вопрос.
У меня вылетает первое приложение, когда я нажимаю кнопку "Поздороваться". В выполнении пишет:

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.dz.secondlesson, PID: 2633
                  java.lang.IllegalStateException: Could not execute method for android:onClick
                      at android.view.View$DeclaredOnClickListener.onClick(View.java:5374)
                      at android.view.View.performClick(View.java:6294)
                      at android.view.View$PerformClick.run(View.java:24770)
                      at android.os.Handler.handleCallback(Handler.java:790)
                      at android.os.Handler.dispatchMessage(Handler.java:99)
                      at android.os.Looper.loop(Looper.java:164)
                      at android.app.ActivityThread.main(ActivityThread.java:6494)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
                   Caused by: java.lang.reflect.InvocationTargetException
                      at java.lang.reflect.Method.invoke(Native Method)
                      at android.view.View$DeclaredOnClickListener.onClick(View.java:5369)
                      at android.view.View.performClick(View.java:6294) 
                      at android.view.View$PerformClick.run(View.java:24770) 
                      at android.os.Handler.handleCallback(Handler.java:790) 
                      at android.os.Handler.dispatchMessage(Handler.java:99) 
                      at android.os.Looper.loop(Looper.java:164) 
                      at android.app.ActivityThread.main(ActivityThread.java:6494) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
                   Caused by: java.lang.ClassCastException: android.support.constraint.ConstraintLayout cannot be cast to android.widget.TextView
                      at com.example.dz.secondlesson.MainActivity.onClick(MainActivity.java:20)
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at android.view.View$DeclaredOnClickListener.onClick(View.java:5369) 
                      at android.view.View.performClick(View.java:6294) 
                      at android.view.View$PerformClick.run(View.java:24770) 
                      at android.os.Handler.handleCallback(Handler.java:790) 
                      at android.os.Handler.dispatchMessage(Handler.java:99) 
                      at android.os.Looper.loop(Looper.java:164) 
                      at android.app.ActivityThread.main(ActivityThread.java:6494) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

Не могу понять, в чем дело, я не копировал текст в onClick, писал вручную с самозаполнением. Среда немного подкорректировала код, но в целом MainActivity.java тот же:

package com.example.dz.secondlesson;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

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

    @SuppressLint("SetTextI18n")
    public void onClick(View view) {
        TextView helloTextView;
        helloTextView = findViewById(R.id.textView);
        helloTextView.setText("hello, kitty");
    }
}

Re: Щелчок кнопки/Счётчик ворон

Приведите код разметки

Re: Щелчок кнопки/Счётчик ворон

danila290396 wrote:

Здравствуйте, Александр!
Прошу прощения, если глупый вопрос.
У меня вылетает первое приложение, когда я нажимаю кнопку "Поздороваться". В выполнении пишет:

android.support.constraint.ConstraintLayout cannot be cast to android.widget.TextView
И вправду, cannot be.
Случайно, не layout назвали helloTextView?

Re: Щелчок кнопки/Счётчик ворон

NeferSky wrote:

Случайно, не layout назвали helloTextView?

Действительно, вчера промахнулся по тексту и назвал textView фон. :)
Спасибо большое, что так оперативно помогли, больше постараюсь не косячить.

Re: Щелчок кнопки/Счётчик ворон

Доброго времени суток! Я тут решил немного подправить код, чтоб лучше выглядело и возник такой вопрос: можно ли как-то покороче записать условие? Я в джаве не особо шарю, только начал учить. Вот код:

package com.example.andrei.counter;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import static com.example.andrei.counter.R.id.textView_;

public class MainActivity extends Activity {

    private Button mCrowsCounterButton;
    private int mCount = 0;
    private TextView mInfoTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mCrowsCounterButton = findViewById(R.id.counterButton);
        mInfoTextView = findViewById(textView_);
        mCrowsCounterButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ++mCount;
                if (mCount % 100 == 11 | mCount % 100 == 12 | mCount % 100 == 13 | mCount % 100 == 14 | mCount % 100 == 15 | mCount % 100 == 16 | mCount % 100 == 17 | mCount % 100 == 18 | mCount % 100 == 19) {
                    mInfoTextView.setText("Я насчитал " + mCount + " ворон.");
                }
                else if (mCount % 10 == 1) {
                    mInfoTextView.setText("Я насчитал " + mCount + " ворону.");
                }
                else if (mCount % 10 == 2 | mCount % 10 == 3 | mCount % 10 == 4){
                    mInfoTextView.setText("Я насчитал " + mCount + " вороны.");
                }
                else{
                    mInfoTextView.setText("Я насчитал " + mCount + " ворон.");
                }
            }
        });
    }

    public void onClick(View view) {
        mInfoTextView.setText("Hello World!");
    }
}

Заранее спасибо за помощь!

Re: Щелчок кнопки/Счётчик ворон

Добрый день, сделал приложение по уроку, при нажатии на "поздороваться" выходит Hello Kitty, а при нажатии посчитать ворон, надпись "Я насчитал .. ворон" прописывается в тексте кнопки, но счетчик при этом работает. Подскажите что в коде не правильно
package com.example.user.hello321;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private Button mCrowsCounterButton;
    private int mCount = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mCrowsCounterButton = findViewById(R.id.button_counter);
        mCrowsCounterButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                TextView mInfoTextView = (TextView)findViewById(R.id.button_counter);
                mInfoTextView.setText("Я насчитал " + ++mCount + " ворон");
            }
        });
    }

    public void onClick(View view) {
        TextView helloTextView = (TextView)findViewById(R.id.textView);
        helloTextView.setText("Hello Kitty!");
    }
}

Re: Щелчок кнопки/Счётчик ворон

вы сами попробуйте рассуждать логически. Если текст выводится не там, где вы ожидате, значит вы напутали с компонентами. Проверьте еще раз в своем макете, правильно ли вы указали идентификаторы. Посмотри на эту строчку
TextView mInfoTextView = (TextView)findViewById(R.id.button_counter);
Вас ничего не смущает?

Re: Щелчок кнопки/Счётчик ворон

Добрый день.
Сделал всё по уроку. Но при попытке запуска приложения через эмулятор выскакивает сообщение о том, что приложение не может быть запущено. При установке apk файла на телефон приложение тоже не открывается.

Acivity Main:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="113dp"
        android:layout_marginTop="166dp"
        android:onClick="onClick"
        android:text="Поздороваться"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="163dp"
        android:layout_marginTop="289dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button_counter"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="115dp"
        android:layout_marginTop="30dp"
        android:text="Считаем ворон"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

    <Button
        android:id="@+id/button_counterCats"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="116dp"
        android:layout_marginTop="26dp"
        android:text="Считаем котов"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView2" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="163dp"
        android:layout_marginTop="410dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>



Java:
package me.brainstory.ravencounter;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class MainActivity extends Activity {


    private int mCount = 0;
    private int mCatsCount = 0;
    TextView mInfoTextView = findViewById(R.id.textView);

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

        Button mCrowsCounterButton = findViewById(R.id.button_counter);
        mCrowsCounterButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mInfoTextView.setText("Я насчитал " + ++mCount + " ворон");
            }
        });

        final TextView mInfoCatsView = findViewById(R.id.textView2);
        Button mCatsCounterButton = findViewById(R.id.button_counterCats);
        mCatsCounterButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mInfoCatsView.setText("Я насчитал " + ++mCatsCount + " ворон");
            }
        });
    }

    public void onClick(View view) {
        mInfoTextView.setText("Hello Kitty!");
    }
}


Error Log:
04/08 15:02:06: Launching app
$ adb install-multiple -r -t D:\AndroidStudioProjects\RavenCounterNew\app\build\intermediates\resources\instant-run\debug\resources-debug.apk D:\AndroidStudioProjects\RavenCounterNew\app\build\intermediates\split-apk\debug\dep\dependencies.apk D:\AndroidStudioProjects\RavenCounterNew\app\build\intermediates\split-apk\debug\slices\slice_0.apk D:\AndroidStudioProjects\RavenCounterNew\app\build\intermediates\split-apk\debug\slices\slice_1.apk D:\AndroidStudioProjects\RavenCounterNew\app\build\intermediates\split-apk\debug\slices\slice_2.apk D:\AndroidStudioProjects\RavenCounterNew\app\build\intermediates\split-apk\debug\slices\slice_3.apk D:\AndroidStudioProjects\RavenCounterNew\app\build\intermediates\split-apk\debug\slices\slice_4.apk D:\AndroidStudioProjects\RavenCounterNew\app\build\intermediates\split-apk\debug\slices\slice_5.apk D:\AndroidStudioProjects\RavenCounterNew\app\build\intermediates\split-apk\debug\slices\slice_6.apk D:\AndroidStudioProjects\RavenCounterNew\app\build\intermediates\split-apk\debug\slices\slice_7.apk D:\AndroidStudioProjects\RavenCounterNew\app\build\intermediates\split-apk\debug\slices\slice_8.apk D:\AndroidStudioProjects\RavenCounterNew\app\build\intermediates\split-apk\debug\slices\slice_9.apk D:\AndroidStudioProjects\RavenCounterNew\app\build\intermediates\instant-run-apk\debug\app-debug.apk
Split APKs installed
$ adb shell am start -n "me.brainstory.ravencounternew/me.brainstory.ravencounternew.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Client not ready yet..Waiting for process to come online
Connected to process 6334 on device emulator-5554
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
I/InstantRun: starting instant run server: is main process
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: me.brainstory.ravencounternew, PID: 6334
                  java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{me.brainstory.ravencounternew/me.brainstory.ravencounternew.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2679)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
                      at android.app.ActivityThread.-wrap11(Unknown Source:0)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
                      at android.os.Handler.dispatchMessage(Handler.java:106)
                      at android.os.Looper.loop(Looper.java:164)
                      at android.app.ActivityThread.main(ActivityThread.java:6494)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
                   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
                      at android.app.Activity.findViewById(Activity.java:2578)
                      at me.brainstory.ravencounternew.MainActivity.<init>(MainActivity.java:15)
                      at java.lang.Class.newInstance(Native Method)
                      at android.app.Instrumentation.newActivity(Instrumentation.java:1174)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2669)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
                      at android.app.ActivityThread.-wrap11(Unknown Source:0) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
                      at android.os.Handler.dispatchMessage(Handler.java:106) 
                      at android.os.Looper.loop(Looper.java:164) 
                      at android.app.ActivityThread.main(ActivityThread.java:6494) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
Application terminated.


В чем может быть проблема?
Спасибо!

Re: Щелчок кнопки/Счётчик ворон

Проблема в 15 строчке кода MainActivity  : "at me.brainstory.ravencounternew.MainActivity.<init>(MainActivity.java:15)" 

Инициализируйте свое текстовое поле mInfoTextView = findViewById(R.id.textView)  в методе onCreate.

64 (edited by MonoLife 2018-11-20 15:52:10)

Re: Щелчок кнопки/Счётчик ворон

Я зарезервировал статичную  переменную private static int mCount = 0;
В apk на смартфоне, после выхода из программы (кнопка назад на аппарате) запускаю программу снова и mCout не обнулилась. Так и должно быть, из-за того, что static? Сборщик мусора ее не собрал, т.к. она не 0?
System.exit(0) на самопальную кнопку выхода обнуляет переменную. Но все равно, текущее activity висит в памяти андроида.