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'

Foi útil?

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
scroll top