Задать вопрос
sparks327
@sparks327

Как правильно собрать класс и как запустить его функцию с кнопки через OnClickListener?

Пишу в программе eclipce. Цель приложения - отправлять определенные команды по udp при нажатии на кнопку.
Разобравшись с кнопками, полями ввода и вывода текста я столкнулся с проблемой привязки самой функции упаковки и отправки к кнопке.
В главном файле приложения у меня есть следующее дерево классов:
public class MainActivity extends Activity 
{
     public class Sender      //класс отправки
       {
            public void sendMessage(String mes)
               {
                //код создания и упаковки датаграммы который и нужно запустить
                }
            public void main(String[] text)
               {
                //код создания отправителя
               }
        }

     public void onCreate(Bundle savedInstanceState) //метод описывающий такие элементы как кнопка, поле ввода и вывода
        {
          OnClickListener oclBtnUdp = new OnClickListener() //слушатель нажатия кнопки
              {
                public void onClick(View v) 
                  {
                   //код который выполнится при нажатии кнопки. 
                   //Именно здесь нужно указать что запустить. (Сама проблема)
                   }
               }

        }
}


Изучаю сам язык Java недавно и успел выучить только некоторые основные понятия, потому все еще не до конца понял что нужно положить в
public void onClick(View v)
чтобы оно отправило команду по udp.
Покорнейше прошу помочь и по возможности объяснить что я делаю не так.

полный код файла MainActivity.java прилагаю :
spoiler
package com.exampletestudp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;

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


public class MainActivity extends Activity {
 public String asd;
 public EditText editText12;
 public TextView tvOut;
 public Button btnOk;
 public Button btnCancel;
 public Button btnUdp;
 public Button btnAdd;
 public Button myMenu;
	 
 byte[] text = null;
 
 
//сам класс отправки	   
 public class Sender {
		
		public String host; 

		public int port; 

		Sender(String host, int port){ 

		this.host = host; 

		this.port = port; 
		}
		public String mes = "comanda";
		
		public void sendMessage(String mes){ 
	 	mes = "comanda";
	   		   	
		try{

		byte[] data = mes.getBytes();
		port = 50000;
		host = asd ; //"10.0.1.5"
		InetAddress addr = InetAddress.getByName(host);
		asd = null;
		text = mes.getBytes();
		 DatagramPacket pack =

		new DatagramPacket( data, data.length, addr, port); 

		DatagramSocket ds = new DatagramSocket(port); 

		ds.send(pack); 

		ds.close();

		}catch(IOException e){

		System.err.println(e); 

		} 

		} 

		
		public void main(String[] text){
		       	
		Sender sndr = new Sender(asd, 50000); 
		
		for (int k = 0; k < text.length; k++)
		
		sndr.sendMessage(text[k]); 
		}
}
 
  
   
	   @Override
	   public void onCreate(Bundle savedInstanceState) {
	     super.onCreate(savedInstanceState);
	     setContentView(R.layout.fragment_main);
	 
	     // найдем View-элементы
	     editText12 = (EditText) findViewById(R.id.editText1) ;
	     tvOut = (TextView) findViewById(R.id.tvOut);
	     btnAdd = (Button) findViewById(R.id.btnAdd);
	     btnOk = (Button) findViewById(R.id.btnOk);
	     btnCancel = (Button) findViewById(R.id.btnCancel);
	     btnUdp = (Button) findViewById(R.id.btnUdp);
	     myMenu = (Button) findViewById(R.id.myMenu);
		     
	     // создаем кнопку отправки сообщения
	     OnClickListener oclBtnUdp = new OnClickListener() {
	         @Override
	          public void onClick(View v) {
	        // сюда нужно подставить ссылку на функцию отправки
	           tvOut.setText("отправлено на "+ asd  );
	           
	         }
	       }; 
	     // создаем кнопку приема и сохранения из поля ввода IP назначения 
	     OnClickListener oclBtnAdd = new OnClickListener() {
		       @Override
		       public void onClick(View v) {
		         // Меняем текст в TextView (tvOut)
		    	    asd = editText12.getText().toString();
		    	    
		    	    tvOut.setText(asd+" сохранен");
		       }
		     };
	     
	     
	     OnClickListener oclBtnOk = new OnClickListener() {
	       @Override
	       public void onClick(View v) {
	         // Меняем текст в TextView (tvOut)
	         tvOut.setText("Нажата кнопка ОК");
	       }
	     };
	     
	     OnClickListener oclBtnCancel = new OnClickListener() {
	         @Override
	         public void onClick(View v) {
	           // Меняем текст в TextView (tvOut)
	           tvOut.setText("Нажата кнопка Cancel");
	         }
	       };
	    
	       
	      
	     // присвоим обработчик кнопкам
		 btnAdd.setOnClickListener(oclBtnAdd);     
	     btnOk.setOnClickListener(oclBtnOk);
	     btnCancel.setOnClickListener(oclBtnCancel);
	     btnUdp.setOnClickListener(oclBtnUdp);
	   }
	   
}

  • Вопрос задан
  • 3247 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
sparks327
@sparks327 Автор вопроса
перерыл весь код отправки полностью и нашел проблему
теперь за место
public class Sender {
		
		public String host; 

		public int port; 

		Sender(String host, int port){ 

		this.host = host; 

		this.port = port; 
		}
		public String mes = "comanda";
		
		public void sendMessage(String mes){ 
	 	mes = "comanda";
	   		   	
		try{

		byte[] data = mes.getBytes();
		port = 50000;
		host = asd ; //"10.0.1.5"
		InetAddress addr = InetAddress.getByName(host);
		asd = null;
		text = mes.getBytes();
		 DatagramPacket pack =

		new DatagramPacket( data, data.length, addr, port); 

		DatagramSocket ds = new DatagramSocket(port); 

		ds.send(pack); 

		ds.close();

		}catch(IOException e){

		System.err.println(e); 

		} 

		} 

		
		public void main(String[] text){
		       	
		Sender sndr = new Sender(asd, 50000); 
		
		for (int k = 0; k < text.length; k++)
		
		sndr.sendMessage(text[k]); 
		}
}

установлен такой код
void SendMessage()
	{
		
		String host;
		int port;
		 
	 	String mes = "commanda";
	   		   	
		try{
		
		byte[] data = mes.getBytes();
		port = 50000;
		host = asd ; 
		
		InetAddress addr = InetAddress.getByName(host);
		
		 DatagramPacket pack =

		new DatagramPacket( data, data.length, addr, port); 

		DatagramSocket ds = new DatagramSocket(port); 

		ds.send(pack); 

		ds.close();

		}catch(IOException e){

		System.err.println(e); 

		} 
		
		
		
		
	}


и вызывается простым SendMessage(); .
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
svd71
@svd71
public void onCreate(Bundle savedInstanceState) //метод описывающий такие элементы как кнопка, поле ввода и вывода
        {
          OnClickListener oclBtnUdp = new OnClickListener() //слушатель нажатия кнопки
              {
                public void onClick(View v) 
                  {
                   Sender senderInstance = new Sender();
                   senderInstance.sendMessage("my message");
                   }
               }

        }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы