Tenho este trecho código.:
public class Consulta extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
Socket cliente = new Socket("10.20.1.100", 12345);
ObjectInputStream entrada = new ObjectInputStream(cliente.getInputStream());
List<PessoaMOD> pessoas = (List) entrada.readObject();
for (PessoaMOD p : pessoas) {
Log.d("teste", "ID: " + p.getId() + " - Nome: " + p.getNome());
}
entrada.close();
Log.d("teste", "Conexão encerrada");
} catch (Exception e) {
Log.d("teste", "Erro: " + e);
}
return null;
}
}
private void botaoComunicarServidor() {
Button btComunicarServidor = (Button) findViewById(R.id.btComunicarServidor);
btComunicarServidor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Consulta().execute();
}
});
}
public class PessoaMOD implements Serializable{
private int id;
private String nome;
public PessoaMOD(){
}
public PessoaMOD(int id, String nome){
setId(id);
setNome(nome);
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
Dá o seguinte erro:
java.lang.ClassNotFoundException: PessoaMOD
Em uma aplicação java, este mesmo código que uso no Android funciona…
No MANIFEST já liberei acesso para Internet:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Quebre esse arquivo em dois (ou três) arquivos diferentes:
Consulta.java
public class Consulta extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
Socket cliente = new Socket("10.20.1.100", 12345);
ObjectInputStream entrada = new ObjectInputStream(cliente.getInputStream());
List<PessoaMOD> pessoas = (List) entrada.readObject();
for (PessoaMOD p : pessoas) {
Log.d("teste", "ID: " + p.getId() + " - Nome: " + p.getNome());
}
entrada.close();
Log.d("teste", "Conexão encerrada");
} catch (Exception e) {
Log.d("teste", "Erro: " + e);
}
return null;
}
}
PessoaMOD.java
public class PessoaMOD implements Serializable{
private int id;
private String nome;
public PessoaMOD(){
}
public PessoaMOD(int id, String nome){
setId(id);
setNome(nome);
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
MinhaActivity.java
private void botaoComunicarServidor() {
Button btComunicarServidor = (Button) findViewById(R.id.btComunicarServidor);
btComunicarServidor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Consulta().execute();
}
});
}
Já está quebrado, só aqui no post que coloquei tudo junto…
Me mostra o caminho desses arquivos… Em qual pasta eles estão, em qual pacote…?
Estão tudo no mesmo pacote:

-----------------EDIT------------------
Descobri o erro, mas não sei como resolver… haha
O erro acontece porque o nome do pacote da classe PessoaMOD no servidor é diferente do nome do pacote da aplicação cliente. Eu coloquei o mesmo nome de pacote e funcionou. Mas eu troquei o nome só para testar, não posso trocar o nome do pacote… Como posso resolver isso?
Quando você usa Socket
o nome da classe serializada e deserializada tem que ser o mesmo. Então, pode fazer algo assim:
com.softcom.compartilhado.PessoaMOD
No seu servidor e no Android.
Isso é causado pela implementação do readObject
, que é mais ou menos assim:
String s = leNomeDaClasse();
Class c = Class.forName(s); // Aqui há o classNotFound
Object o = c.newInstance();
//Popula objeto o...