1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Android Thread e Activity

Estou com um problemão galera

tenho uma activity X dentro dessa activity eu tenho uma ListView toda vez que eu chamo essa activity eu percorro um tabela SQLITE e preencho esse listView até ai blz

mais essa tabela elá sera preenchida de dados que eu cecebo por socket ee crio uma thread envio o socket pra ela e recebo os dados

1º problema eu estou usando a instrução openOrcreateDatabase para abrir o banco, mais ela só funfa dentro de uma activity entao dentro da minha activity X eu eu tenho esse openOrcreateDatabase static pra mim poder acessar ele de dentro da thread ela não dá erro mais tbm não insere os registro que eu recebo por socket

2º problema

E eu preciso que tipo toda vez que eu receber um dado por socket, eu atualize a minha listView que ta na activity

a ideia é, para cada cliente que enviar um dado pra mim pelo socket, eu salvo esse dado no banco SQLITE em seguida eu chamo uma função pra pegar esses dados do bando e jogar na listView, só isso :D

eu ja consigo receber os dados do cliente, só não consigo cadastrar-los no banco de dados.



public class ListaPerguntasColaborador extends Activity {      

        public static List<Pergunta> perguntas = new  ArrayList<Pergunta>();
        public static SQLiteDatabase banco;
        public static Cursor cursor;

        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.colaboradorlistaperguntas);


            banco = openOrCreateDatabase("eventmanager", MODE_WORLD_READABLE, null);

            try{
            //chama thread de popular perguntas
                new Thread(new IniciaEscutaPergunta()).start();
                Log.i(null,"chamou a threade");
            }catch(Exception e){
                Log.i(null, "Error chama thread :"+e);
            }

                //pupulaListaPerguntas();
                populaListView();
                selecionaPergunta();

        }


        static public void pupulaListaPerguntas (){

                try{

                        cursor = banco.query("perguntas", new String[]{"id_aluno","pergunta"},
                         null, null, null, null, null, null);

                        while (cursor.isAfterLast() == false) {
                                perguntas.add(new Pergunta(Integer.parseInt(cursor.getString(0)),cursor.getString(1)));
                    cursor.moveToNext();
                }

                }catch(Exception e){
                        Log.e(null,"Error buscar perguntas .:");
                }


        }


        public void populaListView(){

                ArrayAdapter<Pergunta> adapter = new MyListPerguntas();
                ListView lista = (ListView) findViewById(R.id.listaperguntascolaborador);
                lista.setAdapter(adapter);
        }


        public void selecionaPergunta(){

                ListView lista = (ListView) findViewById(R.id.listaperguntascolaborador);
                lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View viewClicked,
                                        int position, long id) {

                                Pergunta selecionada = perguntas.get(position);
                                String message = "Você selecionou a pergunta " + selecionada.getCod()
                                                                + "Pergunta : " + selecionada.getPergunta();
                                Toast.makeText(ListaPerguntasColaborador.this, message, Toast.LENGTH_LONG).show();
                        }
                });

        }



        private class MyListPerguntas extends ArrayAdapter<Pergunta> {
                public MyListPerguntas() {
                        super(ListaPerguntasColaborador.this, R.layout.pergunta_row_colaborador, perguntas);
                }

                @Override
                public View getView(int position, View convertView, ViewGroup parent) {

                        View itemView = convertView;
                        if (itemView == null) {
                                itemView = getLayoutInflater().inflate(R.layout.pergunta_row_colaborador, parent, false);
                        }

                        Pergunta currentPergunta = perguntas.get(position);

                        TextView id = (TextView) itemView.findViewById(R.id.rowcolaboradorid);
                        id.setText(""+currentPergunta.getCod());

                        TextView text = (TextView) itemView.findViewById(R.id.rowcolaboradorpergunta);
                        text.setText(currentPergunta.getPergunta());

                        return itemView;
                }                              
        }

        public void StratIntent(){
                startActivity(new Intent(ListaPerguntasColaborador.this,ListaPerguntasColaborador.class));
        }      
}
public class IniciaEscutaPergunta implements Runnable {

        @Override
        public void run() {

                try{

                        ServerSocket server = new ServerSocket(4000);

                        while(true){
                                Socket s = server.accept();    
                                Log.i(null,"conexão!");
                            new Thread(new SetaPerguntaBanco(s)).start();                      
                    }                  

                }catch(Exception e){
                 Log.e(null,"Error Start EscutaPergunta!" + e);
                }
        }

}
public class SetaPerguntaBanco implements Runnable{

        SQLiteDatabase banco = null;
        Cursor cursor;

        private Socket socket;
        private DataInputStream out;
        String dados[];
        String dados2;


        public SetaPerguntaBanco (Socket socket){

                try{

                        this.socket = socket;
                        out = new DataInputStream(this.socket.getInputStream());

                        while(true){
                                dados = out.readUTF().split(",");
                                dados2 = out.readUTF();

                                Log.i(null,"teste + "+ dados2);
                        }
                }catch(Exception e){                   
                        Log.i(null,"Error ao recebe dados clientes!");
                }
        }


        @Override
        public void run() {

                try{

                        String sql = "CREATE TABLE IF NOT EXISTS perguntas ("+
                                "id INTEGER PRIMARY KEY, id_aluno TEXT, pergunta TEXT);";              

                        // usso a intacia do banco que esta como estatica na activity pra poder rodar a sql, pois o metodo onCreateDataBase só roda em uma activity
                        ListaPerguntasColaborador.banco.execSQL(sql);


                        Log.i(null, "Sql insert .:"+sql);


                        sql = "INSERT INTO perguntas (ID_ALUNO, PERGUNTA)"+
                                        "VALUES ('"+dados[0]+"','"+dados[1]+"');";     

                        //mais uma vez usso a intacia do banco que esta como estatica na activity pra poder rodar a sql, pois o metodo onCreateDataBase só roda em uma activity       
                        ListaPerguntasColaborador.banco.execSQL(sql);


                        // tento chamar a função estatica la da minha activity, é esssa função que gera a minha listView
                        new ListaPerguntasColaborador().StratIntent();

                        Log.i(null, "Sql insert .:"+sql);

                }catch(Exception e){
                        Log.i(null,"Error deus .:"+e);
                }
        }

}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags android java sockets threads ou faça a sua própria pergunta.