2016-11-26 28 views
-2

文字列のArraylistを1つの大きなカンマ区切り文字列に変換しようとしています。文字列を1つのカンマ区切り文字列に変換する

は、しかし、私は

String joined = TextUtils.join(", ", participants); 

デバッガは、しかし、私に何が起こっているので、空

enter image description here

private ArrayList<String> participants; 

わからない「」として参加した値を、参加者のための4の大きさを示して使用する場合違う?

enter image description here

UPDATE:

 List<String> list = new ArrayList<>(); 
    list.add("Philip Johnson"); 
    list.add("Paul Smith"); 
    list.add("Raja P"); 
    list.add("Ezhu Malai"); 

    String s = TextUtils.join(", ", list); 

私は手動でただし、以下の移入リストを持っているとき、これは動作するコードが今取り組んでいる方法です。 onCreateで

()callAPIで

callApi(type); 
String s = TextUtils.join(", ", participants); 
getSupportActionBar().setTitle(s); 

():

    JSONArray participantsR = sub.getJSONArray("referralParticipants"); 

       Log.e("Participants length ", String.valueOf(participantsR.length())); 

       for (int i = 0; i < participantsR.length(); i++) { 

        JSONObject object = participantsR.getJSONObject(i); 

        String firstname = (String) object.get("fullName"); 

        participants.add(firstname); 

        Log.e("Times", String.valueOf(i)); 

       } 

答えて

1

エラーを再現しようとしていますが、できません。私のコードは以下の通りです:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_temp); 

    List<String> list = new ArrayList<>(); 
    list.add("Philip Johnson"); 
    list.add("Paul Smith"); 
    list.add("Raja P"); 
    list.add("Ezhu Malai"); 

    String s = TextUtils.join(", ", list); 

    Log.d(LOGTAG, s); 
} 

私の出力は、期待通りにPhilip Johnson, Paul Smith, Raja P, Ezhu Malaiです。

正しいTextUtilsクラスをインポートしていますか?新たな情報が与えられ

android.text.TextUtils;

、ここに私のアプローチです:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_temp); 

    callApi(type, new OnResponseListener<List<String>>() { 
     @Override public void onResponse(List<String> list) { 
      getSupportActionBar().setTitle(TextUtils.join(", ", list)); 
     } 
    }); 
} 

私はあなたが使用しているものネットワーキングライブラリ知りませんが、あなたがインターフェイスとしてOnResponseListener定義する必要があります。これは非常に簡単です:

public interface OnResponseListener<T> { 
    public void onResponse(T response); 
} 

あなたはその後、OnResponseListenerのインスタンスを取るために、あなたのcallApi機能を変更する>と、それはコールの完了後onResponse法だ呼び出す必要があります。

Volley libraryを調べ、簡単なネットワーク通話についてAndroid documentationを読むことをおすすめします。

+0

私はちょうどそれをコピーし、あなたの方法を働いた。しかし、私はAPI呼び出しから配列を追加しています。 APIから更新されたリストをリストに置き換えると、結合オブジェクトに何も表示されません。リストには4つの文字列要素があります。 – Adilp

+0

私のリストに人口がどのように分布しているかについて、より多くのコードで質問を更新しました。 – Adilp

+1

ネットワークコールコードを掲示する必要があります。私は、起こっていることは、あなたが参加をする前に呼び出しの完了を待っていないことを前提としているので、空のリストに参加しています。デバッグ時にはネットワーキングスレッドが続行され、デバッグツールを開いている間はリストに表示されるため、デバッグ時には表示されません。 – MrMannWood

0

私はTextutilsなどが何をするか分かりません。これでやります。

StringBuffer sb = new StringBuffer(); 
for (String x : participants) { 
    sb.append(x); 
    sb.append(", "); 
} 
return sb.toString(); 

簡単に使用できます。

+0

これは "sb"として与えられます。参加者にはまだ文字列型の4つのオブジェクトがあります。 – Adilp

0

私はApache Common UtilitiesのStringUtils.joinを使用します。

コードは私のために完璧に動作

StringUtils.join(participants,", "); 
、あなたが望んでいただけの方法超簡単です。

EDIT

要求されたとして、ここでは単にこの単一のユーティリティクラス全体ではなく、ライブラリを使用したい人のためのStringUtils.javaファイルです。

+0

私はこの答えを二番目にしますが、AndroidにはDex制限があり、Apache Commonsは大規模なライブラリです。 – MrMannWood

+0

ただ1つのStringUtilsクラスを使用してください。ライブラリ全体を含める必要はありません。 –

+0

私自身のために、ライブラリから1つのクラスだけをインポートする方法はわかりません。どのようにそれを行うことができるかの例を指しておきましょうか? – MrMannWood

関連する問題