Я разрабатываю приложение для Android для подключения к серверу. У меня возникли проблемы с ошибками, точно такое же приложение отлично работает с java swing на стандартном ПК. Точная ошибка E/AndroidRuntime (1257): java.lang.ClassCastException: net.rc.packet.incoming.lister.PServerList не может быть приведен к net.rc.packet.Packet Это мой класс PServerListAndroid java.lang.ClassCastException с сокетом
package net.rc.packet.incoming.lister;
import java.util.List;
import net.rc.entity.ServerDescription;
import net.rc.packet.incoming.ServerPacket;
public class PServerList implements ServerPacket {
public List <ServerDescription> server_descriptions;
public PServerList(List <ServerDescription> server_descriptions) {
this.server_descriptions = server_descriptions;
}
public String toString() {
StringBuilder string_builder = new StringBuilder();
string_builder.append("[");
for (ServerDescription server_description: server_descriptions) {
string_builder.append(server_description);
string_builder.append(", ");
}
string_builder.append("]");
return string_builder.toString();
}
}
}
А вот мой socketprocessor класс
package net.rc.socket;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue;
import javax.inject.Inject;
import net.rc.packet.Packet;
import net.rc.socket.processor.PacketProcessor;
public class SocketProcessor { @ Inject
public SocketProcessor(List <PacketProcessor> all_processors) {
this.all_processors = all_processors;
}
private final List <PacketProcessor> all_processors;
private final Queue <Byte> buffer = new LinkedBlockingQueue <Byte>();
private PacketProcessor active_processor = null;
public void accept(byte[] bytes) {
for (int i = 0; i < bytes.length; i++) {
buffer.offer(bytes[i]);
}
}
public boolean isComplete() {
while (!buffer.isEmpty()) {
if (active_processor == null) {
int packet_code = (buffer.peek() - 32) & 0xFF;
for (PacketProcessor processor: all_processors) {
if (processor.handles(packet_code)) {
active_processor = processor;
break;
}
}
} else {
if (active_processor.isSegmentDone() && !active_processor.isComplete()) {
active_processor = null;
continue;
}
}
if (active_processor.isComplete()) {
return true;
}
active_processor.accept(buffer.poll());
}
if (active_processor == null) {
return false;
} else {
return active_processor.isComplete();
}
}
public < T extends Packet > T getPacket() {
if (!isComplete()) return null;
T packet = active_processor.getPacket();
active_processor = null;
return packet;
}
public boolean isEmpty() {
return buffer.isEmpty();
}
}
Любые идеи? Я застрял. Вот LogCat
E/AndroidRuntime(1257): java.lang.ClassCastException: net.rc.packet.incoming.lister.PServerList cannot be cast to net.rc.packet.Packet
E/AndroidRuntime(1257): at net.rc.socket.SocketProcessor.getPacket(SocketProcessor.java:70)
E/AndroidRuntime(1257): at net.rc.packet.DefaultPacketServer.receive(DefaultPacketServer.java:40)
E/AndroidRuntime(1257): at net.rc.RemoteControlHandler.run(RemoteControlHandler.java:23)
E/AndroidRuntime(1257): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
E/AndroidRuntime(1257): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
E/AndroidRuntime(1257): at java.lang.Thread.run(Thread.java:856)
stacktrace от logcat пожалуйста? –
Отредактировано и добавлено. –
который является строкой SocketProcessor.java:70? –