質問

私はそれにいくつかのJavaコレクションを持つカスタム書き込み可能クラスを書いています。誰かが私の実装がどのように間違っているのか教えてください コンストラクターで2つのJavaコレクションを渡しています

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);
    }
}

}
.

これは私が 'java.lang.NullPointerException'

を取得しているエラーです。

役に立ちましたか?

解決

I.Eのように使用する前にコレクションを初期化する必要があります。

following=new ArrayList<IntWritable>();
.

次の方法を宣言してツイートを宣言しますが、初期化されていません。

他のヒント

使用する前にメンバーを初期化してください。あなたの場合にはこの

を実行してください
ArrayList<IntWritable> following = new ArrayList<IntWritable>();
ArrayList<Text> tweets= new ArrayList<Text>;
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top