2016-11-26 5 views
-2

Versuchen, eine Arraylist der Zeichenketten in eine große Komma getrennte Zeichenkette zu konvertieren.Arraylist der Zeichenketten in eine Komma getrennte Zeichenkette

aber wenn ich die

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

Debugger zeigt mir Größe von 4 für die Teilnehmer jedoch den zusammengefügten Wert als "" daher leer

enter image description here

private ArrayList<String> participants; 

nicht sicher, was los ist falsch?

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

Dies funktioniert, wenn ich eine Liste, die ich manuell jedoch unten füllen ist, wie der Code jetzt arbeitet.

Im onCreate()

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

In callAPI():

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

       } 

Antwort

1

Ich versuche, Ihren Fehler zu reproduzieren und kann nicht. Hier ist mein Code:

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

Meine Ausgabe ist Philip Johnson, Paul Smith, Raja P, Ezhu Malai wie erwartet.

Importieren Sie die richtige TextUtils-Klasse?

android.text.TextUtils;

die neuen Informationen gegeben, hier ist mein Ansatz:

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

Ich weiß nicht, was Bibliothek Vernetzung Sie verwenden, aber Sie können als Schnittstelle definieren OnResponseListener.Es ist sehr einfach:

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

Sie müssen dann Ihre callApi Funktion modifizieren, um eine Instanz von OnResponseListener nehmen> und rufen Sie es onResponse Methode nach dem Aufruf abgeschlossen ist.

Ich würde empfehlen, in die Volley library, und Lesen der Android documentation über einfache Netzwerkanrufe.

+0

Ich habe es einfach kopiert und es hat sich bewährt. Allerdings füge ich das Array von einem API-Aufruf hinzu. Wenn ich zurück zum Ersetzen der Liste mit der Liste, die von der API aktualisiert wurde, zurückwechsle, wird wieder nichts im Join-Objekt angezeigt. Obwohl die Liste 4 String-Elemente enthält. – Adilp

+0

Ich habe meine Frage mit mehr Code aktualisiert, wie meine Liste ausgefüllt wird – Adilp

+1

Sie sollten Ihren Netzwerk-Call-Code veröffentlichen. Ich gehe davon aus, dass Sie nicht warten auf den Abschluss des Aufrufs, bevor Sie den Join tun, und daher eine leere Liste beitreten. Beim Debuggen wird dies nicht so aussehen, da der Netzwerk-Thread fortgesetzt wird und die Liste auffüllt, während Sie die Debugging-Tools öffnen. – MrMannWood

0

Ich weiß nicht, was textutils tut. Das wird es tun.

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

Einfach genug, verwenden Sie das einfach.

+0

Es gibt sb als "". Die Teilnehmer haben immer noch 4 Objekte vom Typ string. – Adilp

0

Ich benutze StringUtils.join von Apache Common Utilities.

Der Code ist super-einfach nur die Art und Weise wollte man,

StringUtils.join(participants,", "); 

Funktioniert bei mir einwandfrei.

EDIT

Wie gewünscht, hier ist die StringUtils.java Datei für diejenigen, die diese einzelnen Utility-Klasse verwenden wollen einfach nur und nicht die gesamte Bibliothek.

+0

Ich würde diese Antwort zweitens, aber Android hat ein Dex-Limit und Apache Commons ist eine riesige Bibliothek. – MrMannWood

+0

Verwenden Sie einfach die einzelne StringUtils-Klasse. Sie müssen nicht die gesamte Bibliothek einschließen. –

+0

Um meiner selbst willen kann ich nicht nur eine einzelne Klasse aus einer Bibliothek importieren. Würde es Ihnen etwas ausmachen, auf ein Beispiel zu zeigen, wie es gemacht werden kann? – MrMannWood

Verwandte Themen