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

Не могу найти ошибку (Потоки) - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Activity видимый пользователю http://www.cyberforum.ru/android-dev/thread1379051.html
Нужно сделать скриншот во время загрузки активити, обработать его и выставить как бэкграунд. В методе onResume активити еще не отрисовано, поэтому получается черный экран (снимок) @Override protected void onResume() { super.onResume(); RelativeLayout rlGamePole = (RelativeLayout) findViewById(R.id.linearLayout1); View v1 = rlGamePole.getRootView(); ...
Android С чего начать программирование под Андроид? Доброе утро, я сейчас учу PHP, но чего то мне захотелось написать программу для Android, вот что хотел узнать что мне надо почитать что бы научиться писать программы под Андроид ? правельно я понял что надо Java выучить ? а потом Android API ? и что по ним надо почитать? до этого писал на C# http://www.cyberforum.ru/android-dev/thread1378955.html
Android Разместить над каждым айтемом gridview по одному textview
Делаю календарь и мне нужно над gridview разместить дни недели, "пн вт ср чт пт сб вс". Как мне над каждым айтемом прицепить по одному текствью ? Я так понимаю как то через адаптер? Или как? Может кто то делал и знает? Добавлено через 3 часа 58 минут В общем если кому то надо, разместил выше гридвью с датами еще один гридвью и сетю в него дни недели через кастомный адаптер.
Android Построение графиков различных функций на Android
Ребята..помогите пожалуйста.. Взял себе тему курсовой построение графиков различных функций на android В прошлой курсовой сделал хороший справочник по физике..думал и с этой темой справлюсь..но курсовую скоро сдавать а я сижу на месте..нашёл в интернете библиотеки для графиков AChartEngine,aFreeChart,Androidplot,GraphView ...в мануалах и примерах этих библиотек нет именно информации как строить...
Android OpenGL. Управление текстурами http://www.cyberforum.ru/android-dev/thread1378578.html
Здравствуйте! Имеется вот такой отрывок кода загрузки текстуры: GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureNames); .................... // Load the bitmap into the bound texture. GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmp, 0); Я так понимаю, здесь данные изображения загружаются в видео-память в один...
Android Время устройства Подскажите как получить время устройства в формате DD.MM.YYYY HH24:MI:SS ? подробнее

Показать сообщение отдельно
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435

Не могу найти ошибку (Потоки) - Android

20.02.2015, 11:44. Просмотров 211. Ответов 0
Метки (Все метки)

Всем привет. Вот уже неделю не могу найти ошибку в коде. Структура кода такова:

В MainActivity я вызываю IODialog:

Java
1
IODialog.getInstance().show(getSupportFragmentManager(), "");
Код IODialog:

Кликните здесь для просмотра всего текста
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
public class IODialog extends SherlockDialogFragment {
    // singleton
    private static IODialog instance;
    
    private EditText outputEdit;
    private EditText inputEdit;
    private Button   putButton;
    
    // method returns instance of this class
    public static IODialog getInstance() {
        if (instance == null) {
            instance = new IODialog();
        }
        return instance;
    }
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        //setRetainInstance(true);
    }
 
    @Override
    public void onResume() {
        super.onResume();   
        
        ESiInterpreter.getInstance().start();
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        
        getDialog().setTitle(R.string.io_dlg_title);
        View v = inflater.inflate(R.layout.io_dialog, null);
        
        // create output and input edits
        outputEdit = (EditText)v.findViewById(R.id.io_output_edit);
        inputEdit  = (EditText)v.findViewById(R.id.io_input_edit);
        
        // create put button
        putButton = (Button)v.findViewById(R.id.io_put_button);
        // set onClick to PUT button
        putButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                setEnabledPutButton(false);
                ESiInterpreter.conditionVar.open();
                clearInput();
            }
        });
            
        return v;
    }
    
    @Override
    public void onStop() {
        super.onStop();
        
        Log.i("TAG", "onStop");
        //ESiInterpreter.getInstance().stop();
    }
    
 
    @Override
    public void onDismiss(DialogInterface dialog) {
        super.onDismiss(dialog);
        
        Log.i("TAG", "onDismiss");
        ESiInterpreter.getInstance().stop();
    }
 
    // appends output
    public void appendOutput(String out) {
        outputEdit.append(out);
    }   
    
    // returns input char
    public char getInput() {
        if (inputEdit.getText().toString().isEmpty()) {
            return '\0';
        }
        return inputEdit.getText().toString().charAt(0);
    }
    
    // clear output
    public void clearOutput() {
        outputEdit.setText("");
    }
    
    // clear input
    public void clearInput() {
        inputEdit.setText("");
    }
    
    // enable/disable put button
    public synchronized void setEnabledPutButton(boolean enabled) {
        putButton.setEnabled(enabled);
    }
}


Код ESiInterpreter:

Кликните здесь для просмотра всего текста
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
public class ESiInterpreter extends AsyncTask<Void, Character, Void> {
    // singleton
    private static ESiInterpreter instance;
    
    // wait for user input
    public static ConditionVariable conditionVar = 
            new ConditionVariable(false);
    
    // if it's true, put button will be enabled in onProgressUpdate()
    private boolean isPutButtonEnabled;
        
    public static ESiInterpreter getInstance() {
        if (instance == null) {
            instance = new ESiInterpreter();
        }
        return instance;
    }
    
    @Override
    protected Void doInBackground(Void... params) {
        // run interpreter
        Log.i("TAG", "exec");
        
        try {
            Brainfuck.interpret(Source.get());
        } catch (OutOfMemoryError e) {}
        
        return null;
    }
    
    @Override
    protected void onProgressUpdate(Character... values) {
        super.onProgressUpdate(values);
        
        IODialog.getInstance().appendOutput(values[0].toString());
        
        if (isPutButtonEnabled) {
            IODialog.getInstance().setEnabledPutButton(true);
            isPutButtonEnabled = false;
        }
    }
    
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        
        IODialog.getInstance().appendOutput("--- begin ---\n");
    }
 
    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        
        IODialog.getInstance().appendOutput("\n--- end ---\n");
    }
 
    public void start() {   
        if (instance.getStatus() != AsyncTask.Status.RUNNING) {
            instance.execute();
        }
    }
        
    @Override
    protected void onCancelled(Void result) {
        super.onCancelled(result);
        
        Log.i("TAG", "canceled");
    }
 
    public void stop() {
        instance.cancel(true);
        instance = null;
        
        IODialog.getInstance().clearOutput();
        
        ESiInterpreter.conditionVar.open();
        ESiInterpreter.conditionVar.close();
    }
    
    public void publshProgrss(Character c) {
        publishProgress(c);
    }
    
    public void enablePutButton() {
        // put button will be enabled in publishProgress
        isPutButtonEnabled = true;
        // call publishProgress with empty value
        publishProgress('\0');
    }
}



conditionVar нужна для того, чтобы ждать пока пользователь введет значение и нажмет Put кнопку. Вроде все работает хорошо, но когда
я запускаю IODialog и меняю ориентацию устройства, по идее у меня должно прервать покот и начать выполнять его заново, но этого не происходит.
Знаю, что в самом doInBackground нет кода прерывания, но обычное прерывание здесь не помогло, так как все действия выполняються в Brainfuck.interpret(Source.get());
Я почему то думал, что если написать AsyncTask.cancel(true); то выполнение прервется в любом случае, но этого не происходит.
Так же я пробовал запрещать пересоздание IODialog при смене ориентации, но это тоже не помогло. Помогите пожалуйста.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru