Definindo coleções em graváveis personalizados
Pergunta
Estou escrevendo uma classe gravável personalizada com algumas coleções Java.Alguém pode me dizer como está minha implementação errada, estou passando duas coleções de java no construtor
public class details implements Writable {
IntWritable id;
Text username;
ArrayList<IntWritable> following;
ArrayList<Text> tweets;
public details (int id, String u, ArrayList<Integer> f, ArrayList<String> t){
this.id = new IntWritable(id);
this.username = new Text(u);
int i = 0;
while(i<f.size()){
this.following.add(new IntWritable(f.get(i)));
i++;
}
i = 0;
while(i<t.size()){
this.tweets.add(new Text(t.get(i)));
i++;
}
}
@Override
public void readFields(DataInput in) throws IOException {
// TODO Auto-generated method stub
id.readFields(in);
username.readFields(in);
int size=in.readInt();
for(int i=0;i<size;i++){
IntWritable temp = new IntWritable();
temp.readFields(in);
following.add(temp);
}
size=in.readInt();
for(int i=0;i<size;i++){
Text temp = new Text();
temp.readFields(in);
tweets.add(temp);
}
}
@Override
public void write(DataOutput out) throws IOException {
// TODO Auto-generated method stub
id.write(out);
username.write(out);
out.writeInt(following.size());
for(IntWritable s : following){
s.write(out);
}
out.writeInt(tweets.size());
for(Text s : tweets){
s.write(out);
}
}
}
este é o erro que estou recebendo 'java.lang.nullpointerException'
Solução
Você deve inicializar a coleção antes de usá-la, por exemplo.
following=new ArrayList<IntWritable>();
Você acabou de declarar seguidores e tweets, mas não os inicializou.
Outras dicas
Inicialize o membro antes de usá-lo.no seu caso faça isso
ArrayList<IntWritable> following = new ArrayList<IntWritable>();
ArrayList<Text> tweets= new ArrayList<Text>;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow