2017-01-30 9 views
0

私はJavaでプログラムを持っています。私はいくつかの値を保存する必要がありますので、私はこれをしました:プロトコルバッファ - 文字列のリストを追加できません

Parameters.entryParameters.Builder parameters = Parameters.entryParameters.newBuilder(); 

     parameters.setMaxNumberOfRules(maxNumberOfRules); 
     parameters.setMaxPValue(maxPValue); 
     parameters.setMaxRuleLength(maxRuleLength); 
     parameters.setMinimumSupport(minimumSupport); 

それは仕事です。私はこのリストを保存したい場合ので、私は例外が発生しました。このリストList<String> genesOfPrimarySet

for(int i = 0; i < genesOfPrimarySet.size(); i++) { 
       Parameters.entryParameters.primarySet.Builder primarySet = 
         Parameters.entryParameters.primarySet.newBuilder().setGenesOfPrimarySet(i, genesOfPrimarySet.get(i)); 
      } 

宣言:次の行では、私はこれをしませんでした。私は公式のJavaチュートリアルのプロトコルバッファにこのベースを書いて、何が間違っているのかわかりません。ここで

この例外のコードここhttp://pastebin.com/kW4Qp96x

は私のプロトファイルがhttp://pastebin.com/exG3NjAm

ですが、SB、この文字列リストを保存する方法を教えてもらえますか?

編集:Finnaly私は1つのフィールドだけを持つプロトファイルでこれを作ってみました:

repeated string genesPrimarySet = 1; 

私はなぜ知らないが、私はそれが動作INT32する文字列を変更する場合には、この例では」仕事をdoesntの。

答えて

0

Protobufが標準のJavaリスト契約に従います:setXXX()メソッドは、指定された位置の要素を置き換えます。最初はリストの長さが空であるため、IndexOutOfBoundsExceptionがスローされます。要素を追加するには、代わりにaddXXX()メソッドを使用する必要があります。これは、エラーを修正するにもかかわらず

Parameters.entryParameters.primarySet.Builder primarySet = 
    Parameters.entryParameters.primarySet.newBuilder(); 
for (int i = 0; i < genesOfPrimarySet.size(); i++) { 
    primarySet.addGenesOfPrimarySet(genesOfPrimarySet.get(i)); 
} 

を、私はあなたがスタンドアロンprimarySetメッセージを作成したいと疑います。

... 
for (int i = 0; i < genesOfPrimarySet.size(); i++) { 
    parameters.getGenesBuilder().addGenesOfPrimarySet(genesOfPrimarySet.get(i); 
} 
:あなたは entryParametersビルダーが提供するビルダーを使用 - 、あなたは primarySetのためのスタンドアロンBuilderを作成する必要はありません。この場合

message entryParameters { 
    message primarySet { 
    repeated string genesOfPrimarySet = 1; 
    } 

    required int32 maxRuleLength = 1; 
    required int32 minimumSupport = 2; 
    required double maxPValue = 3; 
    required int32 maxNumberOfRules = 4; 
    required primarySet genes = 5; 
    ... 
} 

:私はあなたがentryParametersメッセージのフィールドとしてprimarySetを含めるしたいと考えてい

関連する問題