Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Возврат массива из метода, Компилятор ругается на AsyncTask 
V
    Опции темы
tolik777
  Дата 5.7.2012, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: нет
Всего: 2



Добрый день!
Помогите микроконтроллерщику с кодом Java, никак не могу осилить. Нужно для разовой задачи, уже второй день бьюсь.
В общем есть код:
Код

package com.example.arduino53;

import java.io.IOException;

import org.microbridge.server.Server;
import org.microbridge.server.AbstractServerListener;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.widget.Switch;
import android.widget.TextView;

public class MainActivity extends Activity {
    
    private int Ard_data1 = 0;
    private int Ard_data2 = 0;
    //TextView txt_btn_Arduino;
    public final String APP_NAME = "arduino53";
    
    Server server = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Создаем TCP сервер (на основе сервера MicroBridge LightWeight)
      try
      {
          server = new Server(4568); //Этот же порт необходимо использовать и на ADK-плате
          server.start();            
      } catch (IOException e)
      {
          Log.e(APP_NAME, "Unable to start TCP server", e);
          System.exit(-1);
      }
          
        server.addListener(new AbstractServerListener() {

            @Override
            public void onReceive(org.microbridge.server.Client client, byte[] data)
            {
                Log.d(APP_NAME, "data0:"+data[0]+"; data1:"+data[1]);
                if (data.length<2) Log.e(APP_NAME, "Размер данных менее 2-х байт:"+data.length);

                //Ard_data = ((data[1] << 8) | (data[0] & 0xFF));    // Формируем слово из байт
                Ard_data1 = data[0];
                Ard_data2 = data[1];
                        
                //Any update to UI can not be carried out in a non UI thread like the one used
                //for Server. Hence runOnUIThread is used.
                runOnUiThread(new Runnable() {
                    //@Override
                    public void run() {
                        new UpdateData().execute(Ard_data1,Ard_data2);
                    }
                });
            }
        });     
    }
    
    @Override
    protected void onDestroy (){
     super.onDestroy();
     server.stop();
    }
    
    class UpdateData extends AsyncTask<Integer, Integer, Integer> {
        // Called to initiate the background activity
        @Override
        protected Integer[] doInBackground(Integer... ArdState) {
            Log.d(APP_NAME, "ArdState0:"+ArdState[0]);
            Log.d(APP_NAME, "ArdState1:"+ArdState[1]);
            return (ArdState);  //Возвращаем в onPostExecute()
        }
        
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            // Not used in this case
        }
        
        //@Override
        protected void onPostExecute(Integer... result) {
            //Log.d(APP_NAME, "onPostExecute:"+result);
            
            //int Ard_rnd = Integer.parseInt(result) >> 8;        // Извлекаем старший байт
            //int Ard_btn = Integer.parseInt(result) & 0xFF;        // Извлекаем младший байт
            
            TextView txt_btn_Arduino = (TextView) findViewById(R.id.textView2);
            txt_btn_Arduino.setText(String.valueOf(result[0]));    // Выводим на activity RND число полученное от ADK
            
            Switch switch1 = (Switch) findViewById(R.id.switch1);
            
            if(result[1] == 1){
                switch1.setChecked(true);
            }
            else switch1.setChecked(false);
        }
    }
}


Проблема с этим методом:
protected Integer doInBackground(Integer... ArdState)

Мне нужно вернуть массив ArdState. Но когда пишу так: protected Integer[] doInBackground
компилятор ругается так:
The return type is incompatible with AsyncTask<Integer,Integer,Integer>.doInBackground(Integer[])

PM MAIL WWW ICQ   Вверх
priam220
Дата 5.7.2012, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 4.6.2010

Репутация: 7
Всего: 8



Код

    public static void main(String[] args) {
        int [] arr = new int[]{1,2,3};
        ch(arr);
         System.out.print(arr[0]);
    }

    static void ch(int... arr) {
            arr[0] = 2;
    }

можно по ссылке

AsyncTask<Integer, Integer, Integer> содержит doInBackground и возвращаемый тип у него не Integer[]. Вы не можете менять при наследовании return тип на свое усмотрение.

Это сообщение отредактировал(а) priam220 - 5.7.2012, 21:26
PM MAIL   Вверх
tolik777
Дата 6.7.2012, 05:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: нет
Всего: 2



Да я пробовал там прописывать так: class UpdateData extends AsyncTask<Integer[], Integer, Integer>
Тогда ошибка такая: The type MainActivity.UpdateData must implement the inherited abstract method AsyncTask<Integer[],Integer,Integer>.doInBackground(Integer[]...)

Как тут быть? Или проблема нерешаемая и лучше оставить все со сдвигами и типами String как было раньше?
Просто ради интереса хочется избавиться от этих лишних сдвигов
PM MAIL WWW ICQ   Вверх
aleksandy
Дата 6.7.2012, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 4
Всего: 5



Обратиться к первоисточнику за информацией религия не позволяет?
Цитата(http://developer.android.com/reference/android/os/AsyncTask.html)
The three types used by an asynchronous task are the following:

1. Params, the type of the parameters sent to the task upon execution.
2. Progress, the type of the progress units published during the background computation.
3. Result, the type of the result of the background computation.

PM   Вверх
tolik777
Дата 6.7.2012, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: нет
Всего: 2



Цитата

Обратиться к первоисточнику за информацией религия не позволяет?

Не вижу никакой связи с моей проблемой. Причем тут описание методов что вы привели? Это я все читал.
PM MAIL WWW ICQ   Вверх
priam220
Дата 6.7.2012, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 4.6.2010

Репутация: 7
Всего: 8



Проблема в том, что вы указываете Result как Integer а переопределяете метод и передаете protected Integer[] doInBackground
т.е. в вашем случае должно быть <Integer[], Integer, Integer[]> (связь прямая)

Это сообщение отредактировал(а) priam220 - 6.7.2012, 13:30
PM MAIL   Вверх
Pawl
Дата 6.7.2012, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



priam220, Вы наверное опечатались: код
Код

<Integer[], Integer, Integer[]>
 тоже не компилится, должно быть так:
Код

class UpdateData extends AsyncTask<Integer, Integer, Integer[]>



--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
tolik777
Дата 6.7.2012, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: нет
Всего: 2



Большое спасибо! Наконец таки заработало как надо! 2 дня промучался с Java.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0971 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.