gpt4 book ai didi

java - Android Socket UI 错误

转载 作者:行者123 更新时间:2023-12-01 13:13:14 25 4
gpt4 key购买 nike

我和我的同学正在尝试设计一个新的应用程序,但我们遇到了一个问题。
我们正在尝试通过套接字将 Raspberry 与手机连接以发送消息。我们从互联网上编辑了一些代码以适合我们的应用程序(该代码运行良好)。我们没有对此做太多改变,但我们不知道为什么它不起作用,尽管方法和一切都是一样的。我已经查找了错误,但没有成功。我一直在阅读有关异步任务的内容,但我编写的其他代码也不起作用。我发布了我正在研究的两个类的方法。

我们希望当从布局的按钮调用 envira() 方法时,从 ListView 获取信息,将所有内容放入字符串中,打开套接字,发送消息并关闭套接字。字符串部分完全没问题,但是当它调用其他类的方法时抛出异常,我们不知道如何解决。

注意:println-s 是我们调试应用程序的特定方式。请不要打我们

这是代码:

方法环境

public void enviar(View view){
// get the row the clicked button is in
int i = 0;
String eskaera="";
Sockettest sckt = new Sockettest();

//Conectar
boolean conectstatus = sckt.Connect();
if (conectstatus) {//mostramos mensaje
System.out.println("Conexion OK ");

} else {//error al conectarse
//mostramos msg de error
System.out.println("Error.. ");
}

while (i < obtenerItems().size()) {
ListView lv = (ListView)findViewById(R.id.listViewBokatas);
LinearLayout lerroa = (LinearLayout) lv.getChildAt(i);
TextView bokata = (TextView) lerroa.getChildAt(0);
EditText kantitatea = (EditText) lerroa.getChildAt(2);
int balioa = Integer.parseInt(kantitatea.getText().toString());
if (balioa != 0) {
eskaera+=balioa + " X " + bokata.getText().toString() +"\n";
}
i++;
}
System.out.println(eskaera);
sckt.Snd_txt_Msg(eskaera);
sckt.Disconnect();
//return eskaera;
}

类套接字测试

public class Sockettest  {
/** Called when the activity is first created. */

Socket miCliente;

ObjectOutputStream oos;
ObjectInputStream ois;
Mensaje_data mdata;



//Conectamos
public boolean Connect() {
//Obtengo datos ingresados en campos
String IP = "viserion.no-ip.biz";
int PORT = Integer.valueOf("5555");


try {//creamos sockets con los valores anteriores
System.out.println("ERROR DE LOS GORDOS0");
miCliente = new Socket("viserion.no-ip.biz", 5555);
System.out.println("ERROR DE LOS GORDOS2");
//si nos conectamos
if (miCliente.isConnected() == true) {
return true;
} else {
System.out.println("ERROR DE LOS GORDOS");
return false;
}
} catch (Exception e) {
//Si hubo algun error mostrmos error
System.out.println("ERROR DE LOS GORDOS3");
Log.e("Error connect()", "" + e);
return false;
}
}

//Metodo de desconexion
public void Disconnect() {
try {
//Prepramos mensaje de desconexion
Mensaje_data msgact = new Mensaje_data();
msgact.texto = "";
msgact.last_msg = true;
//avisamos al server que cierre el canal
boolean val_acc = Snd_Msg(msgact);

if (!val_acc) {//hubo un error
System.out.println(" Error ");
Log.e("Disconnect() -> ", "!ERROR!");

} else {//ok nos desconectamos
System.out.println("Desconectado");
//camibmos led a rojo
Log.e("Disconnect() -> ", "!ok!");
//cerramos socket
miCliente.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}



//Envio mensaje de texto
public void Snd_txt_Msg(String txt) {

Mensaje_data mensaje = new Mensaje_data();
//seteo en texto el parametro recibido por txt
mensaje.texto = txt;
//no es el ultimo msg
mensaje.last_msg = false;
//mando msg
boolean val_acc = Snd_Msg(mensaje);
//error al enviar
if (!val_acc) {
System.out.println(" Error ");
Log.e("Snd_txt_Msg() -> ", "!ERROR!");
}
}

/*Metodo para enviar mensaje por socket
*recibe como parmetro un objeto Mensaje_data
*retorna boolean segun si se pudo establecer o no la conexion
*/
public boolean Snd_Msg(Mensaje_data msg) {

try {
//Accedo a flujo de salida
oos = new ObjectOutputStream(miCliente.getOutputStream());
//creo objeto mensaje
Mensaje_data mensaje = new Mensaje_data();

if (miCliente.isConnected())// si la conexion continua
{
//lo asocio al mensaje recibido
mensaje = msg;
//Envio mensaje por flujo
oos.writeObject(mensaje);
//envio ok
return true;

} else {//en caso de que no halla conexion al enviar el msg
System.out.println("Error...");//error
return false;
}

} catch (IOException e) {// hubo algun error
Log.e("Snd_Msg() ERROR -> ", "" + e);

return false;
}
}
}

LogCat

03-26 21:48:45.636: I/System.out(27379): ERROR DE LOS GORDOS0
03-26 21:48:45.636: I/System.out(27379): ERROR DE LOS GORDOS3
03-26 21:48:45.636: E/Error connect()(27379): android.os.NetworkOnMainThreadException
03-26 21:48:45.636: I/System.out(27379): Error..
03-26 21:48:45.676: I/System.out(27379): 3 X Bacon-Queso
03-26 21:48:45.676: I/System.out(27379): 1 X Jamaica
03-26 21:48:45.676: D/AndroidRuntime(27379): Shutting down VM
03-26 21:48:45.676: W/dalvikvm(27379): threadid=1: thread exiting with uncaught exception (group=0x2b542210)
03-26 21:48:45.736: E/AndroidRuntime(27379): FATAL EXCEPTION: main
03-26 21:48:45.736: E/AndroidRuntime(27379): java.lang.IllegalStateException: Could not execute method of the activity
03-26 21:48:45.736: E/AndroidRuntime(27379): at android.view.View$1.onClick(View.java:3063)
03-26 21:48:45.736: E/AndroidRuntime(27379): at android.view.View.performClick(View.java:3534)
03-26 21:48:45.736: E/AndroidRuntime(27379): at android.view.View$PerformClick.run(View.java:14263)
03-26 21:48:45.736: E/AndroidRuntime(27379): at android.os.Handler.handleCallback(Handler.java:605)
03-26 21:48:45.736: E/AndroidRuntime(27379): at android.os.Handler.dispatchMessage(Handler.java:92)
03-26 21:48:45.736: E/AndroidRuntime(27379): at android.os.Looper.loop(Looper.java:137)
03-26 21:48:45.736: E/AndroidRuntime(27379): at android.app.ActivityThread.main(ActivityThread.java:4441)
03-26 21:48:45.736: E/AndroidRuntime(27379): at java.lang.reflect.Method.invokeNative(Native Method)
03-26 21:48:45.736: E/AndroidRuntime(27379): at java.lang.reflect.Method.invoke(Method.java:511)
03-26 21:48:45.736: E/AndroidRuntime(27379): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-26 21:48:45.736: E/AndroidRuntime(27379): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-26 21:48:45.736: E/AndroidRuntime(27379): at dalvik.system.NativeStart.main(Native Method)
03-26 21:48:45.736: E/AndroidRuntime(27379): Caused by: java.lang.reflect.InvocationTargetException
03-26 21:48:45.736: E/AndroidRuntime(27379): at java.lang.reflect.Method.invokeNative(Native Method)
03-26 21:48:45.736: E/AndroidRuntime(27379): at java.lang.reflect.Method.invoke(Method.java:511)
03-26 21:48:45.736: E/AndroidRuntime(27379): at android.view.View$1.onClick(View.java:3058)
03-26 21:48:45.736: E/AndroidRuntime(27379): ... 11 more
03-26 21:48:45.736: E/AndroidRuntime(27379): Caused by: java.lang.NullPointerException
03-26 21:48:45.736: E/AndroidRuntime(27379): at com.eetam.ibokata.Sockettest.Snd_Msg(Sockettest.java:103)
03-26 21:48:45.736: E/AndroidRuntime(27379): at com.eetam.ibokata.Sockettest.Snd_txt_Msg(Sockettest.java:87)
03-26 21:48:45.736: E/AndroidRuntime(27379): at com.eetam.ibokata.BokatasActivity.enviar(BokatasActivity.java:131)
03-26 21:48:45.736: E/AndroidRuntime(27379): ... 14 more

我相信你们!感谢大家都在寻找解决方案,我将为你们所有人感到非常高兴。非常感谢!

最佳答案

在你的 logcat 中有一行

ERROR DE LOS GORDOS0

后接一行

ERROR DE LOS GORDOS3

按照 Connect 方法中的代码,这意味着该行

miCliente = new Socket("viserion.no-ip.biz", 5555);

是抛出Exception e的那个 - 结果你的miCliente变量没有初始化并保持null。当您在第 103 行尝试执行 miCliente.getOutputStream() 时,您最终得到了 NullPointerException

现在,如果您仔细阅读 logcat,您会发现抛出的错误是 NetworkOnMainThreadException - 这意味着您正在尝试从主 UI 线程连接套接字。 Android 不允许这样做(或者至少较新的版本不允许这样做)。将您的连接/发送消息/断开连接代码放入单独的线程中(例如 AsyncTask) - 您可能会没事。

关于java - Android Socket UI 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22672701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com