Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
ASKMAN
10 / 10 / 2
Регистрация: 07.02.2014
Сообщений: 109
#1

Image OnTouchListener crash - Android

25.01.2016, 14:38. Просмотров 251. Ответов 11
Метки нет (Все метки)

Делаю своё первое приложение под Android и столкнулся с следующей проблемой - программа вылетает при добавлении в неё следующего кода (colorPicker – это ImageView):
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 colorPicker.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch(event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        colorPicker.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(),R.drawable.color_picker_on_pressed));
                        break;
                    case MotionEvent.ACTION_UP:
                        colorPicker.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(),R.drawable.color_picker));
                        break;
                }
                return true;
            }
        });
По задумке пока нажато на ImageView должно отображаться другое изображение. В чем может быть проблема?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2016, 14:38     Image OnTouchListener crash
Посмотрите здесь:

search image and slide Android
Image in GridView Android
image карусель Android
Intent (image+text) Android
Не работает OnTouchListener Android
Android OnTouchListener
Получить crash reports Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 724
25.01.2016, 14:55     Image OnTouchListener crash #2
Java
1
.setOnTouchListener(new OnTouchListener() {
Паблито
2013 / 1755 / 545
Регистрация: 12.05.2014
Сообщений: 6,208
Завершенные тесты: 1
25.01.2016, 14:58     Image OnTouchListener crash #3
код ошибки надо
а почему не сделать смену картинки через селекторы?
примерно так
1. в папке res/drawable создаем файл, например selector.xml
XML
1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_white" android:state_pressed="false"  />
    <item android:drawable="@drawable/ic_black" android:state_pressed="true" />
</selector>
названия картинок подставить свои
2. ImageView разметка такая
XML
1
2
3
4
5
    <ImageView
        android:clickable="true"
        android:background="@drawable/selector"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
обязательно тег clickable
ASKMAN
10 / 10 / 2
Регистрация: 07.02.2014
Сообщений: 109
25.01.2016, 15:41  [ТС]     Image OnTouchListener crash #4
Valakin, Паблито,
Кликните здесь для просмотра всего текста
01-25 12:25:19.457 8480-8480/com.khomyak.rgbledcontroller E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.khomyak.rgbledcontroller, PID: 8480
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.khomyak.rgbledcontroller/com.khomyak.rgbledcontroller.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setOnTouchListener(android.view.View$OnTouchListener)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setOnTouchListener(android.view.View$OnTouchListener)' on a null object reference
at com.khomyak.rgbledcontroller.MainActivity.onCreate(MainActivity.java:55)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)*
at android.app.ActivityThread.-wrap11(ActivityThread.java)*
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)*
at android.os.Handler.dispatchMessage(Handler.java:102)*
at android.os.Looper.loop(Looper.java:148)*
at android.app.ActivityThread.main(ActivityThread.java:5417)*
at java.lang.reflect.Method.invoke(Native Method)*
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)*
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)*
Вот код ошибки. Такой вывер с кодом связан с тем что что на ACTION_UP будет так же Intent.
Цитата Сообщение от Valakin Посмотреть сообщение
.setOnTouchListener(new OnTouchListener() {
Проходил этот вариант - пишет, что не может вызвать этот метод.
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
25.01.2016, 15:49     Image OnTouchListener crash #5
ASKMAN, ImageView нужно сначала инициализировать, а потом уже вешать не него листенер.
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 724
25.01.2016, 15:50     Image OnTouchListener crash #6
видимо в коде нет такой строки
Java
1
ImageView colorPicker= (ImageView) findViewById(R.id.ImageView1);
ASKMAN
10 / 10 / 2
Регистрация: 07.02.2014
Сообщений: 109
25.01.2016, 16:09  [ТС]     Image OnTouchListener crash #7
Valakin, Spelcrawler,нет, инициализация есть, и она была с самого начала. Только что понял, что проблема не в одном ImageView. Почему то нет доступа ни до одного элемента - их находит и связывает с переменными, но как только пытаюсь что-то с каким либо элементом делать, то приложение останавливается
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
25.01.2016, 16:11     Image OnTouchListener crash #8
Цитата Сообщение от ASKMAN Посмотреть сообщение
инициализация есть
Не верю, покажите весь код.
ASKMAN
10 / 10 / 2
Регистрация: 07.02.2014
Сообщений: 109
25.01.2016, 16:23  [ТС]     Image OnTouchListener crash #9
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Не верю
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
package com.khomyak.rgbledcontroller;
 
import android.bluetooth.BluetoothAdapter;
import android.content.Intent;
import android.os.Bundle;
 
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MotionEvent;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.Switch;
import android.widget.Toast;
 
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.common.api.GoogleApiClient;
 
 
import java.util.HashMap;
import java.util.Map;
 
public class MainActivity extends AppCompatActivity {
    private Button connect;
    private Button send;
    private Switch modeSelect;
    private ImageView colorPicker;
    private CheckBox[] sections;
    private BluetoothAdapter BA;
    final int REQUEST_ENABLE_BT = 1;
    final Map <String,String> SECTION_CODE = InitMap();
    /**
     * ATTENTION: This was auto-generated to implement the App Indexing API.
     * See [url]https://g.co/AppIndexing/AndroidStudio[/url] for more information.
     */
    private GoogleApiClient client;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sections    = new CheckBox[5];
        connect     = (Button) findViewById(R.id.connect);
        send        = (Button) findViewById(R.id.send);
        modeSelect  = (Switch) findViewById(R.id.mode);
        colorPicker = (ImageView) findViewById(R.id.colorpicker);
        sections[0] = (CheckBox) findViewById(R.id.section1);
        sections[1] = (CheckBox) findViewById(R.id.section2);
        sections[2] = (CheckBox) findViewById(R.id.section3);
        sections[3] = (CheckBox) findViewById(R.id.section4);
        sections[4] = (CheckBox) findViewById(R.id.section5);
        BA = BluetoothAdapter.getDefaultAdapter();
        if (BA == null)
        {
            Toast.makeText(this,"Додаток потребує наявності блютуз",Toast.LENGTH_LONG).show();
            finish();
        }
        if (!BA.isEnabled()) {
            Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(turnOn, REQUEST_ENABLE_BT);
        }
        colorPicker.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch(event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        colorPicker.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(),R.drawable.color_picker_on_pressed));
                        break;
                    case MotionEvent.ACTION_UP:
                        colorPicker.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(),R.drawable.color_picker));
                        break;
                }
                return true;
            }
        });
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See [url]https://g.co/AppIndexing/AndroidStudio[/url] for more information.
        client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
    }
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode==REQUEST_ENABLE_BT && resultCode==RESULT_CANCELED) {
            Toast.makeText(this,"Додаток потребує блютуз з\'єднання",Toast.LENGTH_LONG).show();
            finish();
        }
        if (requestCode==REQUEST_ENABLE_BT && resultCode==RESULT_OK) {
            colorPicker.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(), R.drawable.color_picker));
            colorPicker.setClickable(true);
        }
    }
 
    public void sendData(View v)
    {
        String currentSegment = new String();
        for (int i=1;i<5;i++) if(sections[i].isChecked())currentSegment+=sections[i].getText();
        //Toast.makeText(getApplicationContext(),sections[0].getText(),Toast.LENGTH_LONG).show();
    }
 
    @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);
    }
 
    private Map<String, String> InitMap() {
        Map <String,String> aMap = new HashMap<String, String>();
        aMap.put("1","a");
        aMap.put("2","b");
        aMap.put("3","c");
        aMap.put("4","d");
        aMap.put("5","e");
        aMap.put("12","f");
        aMap.put("13","g");
        aMap.put("14","h");
        aMap.put("15","i");
        aMap.put("23","j");
        aMap.put("24","k");
        aMap.put("25","l");
        aMap.put("34","m");
        aMap.put("35","n");
        aMap.put("45","o");
        aMap.put("123","p");
        aMap.put("124","q");
        aMap.put("125","r");
        aMap.put("234","s");
        aMap.put("235","t");
        aMap.put("345","u");
        aMap.put("1234","v");
        aMap.put("1235","w");
        aMap.put("2345","x");
        aMap.put("12345","y");
        return aMap;
    }
 
}
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
25.01.2016, 16:25     Image OnTouchListener crash #10
ASKMAN, а где setContentView()? Должен быть в onCreate() после super.onCreate().
Паблито
2013 / 1755 / 545
Регистрация: 12.05.2014
Сообщений: 6,208
Завершенные тесты: 1
25.01.2016, 16:25     Image OnTouchListener crash #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
эта строчка setContentView(R.layout.activity_main);
должна идти ДО всех инициализаций
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2016, 16:37     Image OnTouchListener crash
Еще ссылки по теме:

Анализ crash-лога Android
OnTouchListener Android
Android OnTouchListener и толстый дрожащий палец :)
Android Crash Activity при присвоении ItemList-у Adapter-a
ListView и image Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ASKMAN
10 / 10 / 2
Регистрация: 07.02.2014
Сообщений: 109
25.01.2016, 16:37  [ТС]     Image OnTouchListener crash #12
Паблито, Spelcrawler, Супер, Спасибо) начав работать с Android мне почему то setContentView напомнил setLayout с Qt от и нарисовалась параллель.
Yandex
Объявления
25.01.2016, 16:37     Image OnTouchListener crash
Ответ Создать тему
Опции темы

Текущее время: 09:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru