2014-04-14 113 views
0

我正在寫一個自定義可寫類,其中包含一些Java集合。誰能告訴我怎麼是我的錯實施 我傳遞了兩個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」

回答

0

你必須之前初始化集合使用它就像

following=new ArrayList<IntWritable>(); 

你只是聲明以下和推文,但沒有初始化它。

+0

謝謝你解決我的問題 – user3301448

0

在使用它之前初始化成員。在你的情況下做到這一點

ArrayList<IntWritable> following = new ArrayList<IntWritable>(); 
ArrayList<Text> tweets= new ArrayList<Text>;