Sie bekommen ein array von JSON-Objekt in Java

Wie würde ich mich über die Analyse dieses JSON-Objekt und die „Gruppen“ – array in Java auf Android.

{ "groups": [ "Total_Social_Beta_Testers", "Test_Group" ] }

Hier ist mein code:

LoginActivity.java

    Response.Listener<String> responseListener = new Response.Listener<String>() {


        @Override
        public void onResponse(String response) {
            try {
                JSONObject jsonResponse = new JSONObject(response);
                boolean success = jsonResponse.getBoolean("success");

                if (success) {
                    String username = jsonResponse.getString("username");
                    String email = jsonResponse.getString("email");
                    String gender = jsonResponse.getString("gender");
                    String country = jsonResponse.getString("country");
                    String verified = jsonResponse.getString("verified");
                    String avatar = jsonResponse.getString("avatar");
                    //String group = jsonResponse.getString("groups");

                    int numlength = 0;
                    int CI = 0;

                    JSONArray jsonArrayGR = jsonResponse.getJSONArray("groups");
                    //String array of 500 spots
                    String rows = "";

                    for (int i = 0; i < jsonArrayGR.length(); i++){
                        CI++;
                        rows = jsonArrayGR.getString(i);
                    }
                    //int rows = jsonResponse.getInt("rows");

                    //Starting Activity
                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                    intent. addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                    intent.putExtra("username", username);
                    intent.putExtra("email", email);
                    intent.putExtra("gender", gender);
                    intent.putExtra("country", country);
                    intent.putExtra("verified", verified);
                    intent.putExtra("avatar", avatar);
                    intent.putExtra("groups", rows);

                    //intent.putExtra("rows", rows);

                    session.createUserSession(
                            username,
                            email,
                            gender,
                            country,
                            verified,
                            avatar,
                            rows
                    );

                    Toast.makeText(getBaseContext(), "Login succeed, welcome!" , Toast.LENGTH_LONG).show();

                    //Adding a new flag to start the activity
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    LoginActivity.this.startActivity(intent);
                    _loginButton.setEnabled(true);
                    finish();

                } else {
                    onLoginFailed();
                }
            }
            catch (JSONException e){
                e.printStackTrace();
            }
        }

    };
    LoginRequest loginRequest = new LoginRequest(e, password, responseListener);
    RequestQueue queue = Volley.newRequestQueue(LoginActivity.this);
    queue.add(loginRequest);

UserSession.java

 public void createUserSession(
        String name,
        String email,
        String gender,
        String country,
        String verified,
        String avatar,
        String groups){

    //Storage_Start session
    editor.putBoolean(IS_USER_LOGIN, true);

    //Storing name in pref
    editor.putString(KEY_NAME, name);

    //Storage of the email in pref
    editor.putString(KEY_EMAIL, email);

    //Storing the gender
    editor.putString(KEY_GENDER, gender);

    //Storing the country
    editor.putString(KEY_COUNTRY, country);

    //Storing the verified
    editor.putString(KEY_VERIFIED, verified);

    //Storing avatar
    editor.putString(KEY_AVATAR, avatar);

    //Storing groups
    editor.putString(KEY_GROUPS, groups);

    //Storing the gRows
    //editor.putInt(INT_GROUPS, numlength);

    //commit changes
    editor.commit();
}




/**
 * Get stored session data
 * */
public HashMap<String, String> getUserDetails(){

    //Use hashmap to store user credentials
    HashMap<String, String> user = new HashMap<String, String>();

    //user name
    user.put(KEY_NAME, pref.getString(KEY_NAME, null));

    //user email id
    user.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null));

    //gender
    user.put(KEY_GENDER, pref.getString(KEY_GENDER, null));

    //country
    user.put(KEY_COUNTRY, pref.getString(KEY_COUNTRY, null));

    //verifed?
    user.put(KEY_VERIFIED, pref.getString(KEY_VERIFIED, null));

    //Avatar
    user.put(KEY_AVATAR, pref.getString(KEY_AVATAR, null));

    //Groups
    user.put(KEY_GROUPS, pref.getString(KEY_GROUPS, null));

    //return user
    return user;
}

UPDATE
Dies ist, wo ich bin das speichern der Werte in die recyclerview:

public class ChatsAdapter extends RecyclerView.Adapter<ChatsAdapter.MyViewHolder> {
private List<Groups> chatlist;

public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView group;

    public MyViewHolder(View view) {
        super(view);
        group = (TextView) view.findViewById(R.id.groups);
    }
}

public ChatsAdapter(List<Groups> chatlist){
    this.chatlist = chatlist;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)    {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.chat_row_list, parent, false);

    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    Groups groups = chatlist.get(position);
    holder.group.setText(groups.getTitle());
}

@Override
    public int getItemCount() {
        return chatlist.size();
   }
}

Und dies ist, wie ich bin, definieren Sie die Zeichenfolgen:

 public class Groups {
    private String groups = "";

    public Groups() {
    }

     public Groups(String groups) {
         this.groups = groups;
     }

     public String getTitle() {
         return groups;
     }
   }

Dies ist, wie ich die Anzeige der Werte, die von der adapter (oben) in meiner Haupt-Tätigkeit:

    //groups
    String g = user.get(UserSessionManager.KEY_GROUPS);

    String numrows = user.get(UserSessionManager.INT_GROUPS);

    //String grows = user.get(UserSessionManager.INT_GROUPS);


    int rows = Integer.parseInt(numrows);

    Groups groups = new Groups(g);
    groupslist.add(groups);


    chatsAdapter.notifyDataSetChanged();
  • sind Sie immer Fehler ?
  • Nein, ich habe keine Fehler. Ich möchte die Anzeige verschiedener Werte in meinem recyclerview
InformationsquelleAutor George Guo | 2017-02-04



4 Replies
  1. 0

    ich glaube, hier müssen Sie vor problem

     for (int i = 0; i < jsonArrayGR.length(); i++){
                            CI++;
                            rows = jsonArrayGR.getString(i);
                        }

    dies ist weil Sie nicht Anhängen Zeilen Wert in jedem Schleifendurchlauf, anstatt Sie über das schreiben der vorherigen Werte.

    einfache Lösungen

    rows = jsonArrayGR.getString(i)+rows;

    optimale Lösung

    StringBuilder rows = new StringBuilder();
    
                        for (int i = 0; i < jsonArrayGR.length(); i++){
                            CI++;
                            rows.append(jsonArrayGR.getString(i));
                        }

    und schließlich verwenden Sie es in Ihrem code

    intent.putExtra("groups", rows);

    P. S. wenn Sie möchten, verwenden Sie die Zeilen als String, nur verwenden
    String rows = rows.toString();

    ich hoffe, das wird sicher helfen 😀

    • Okay. Dies löst das problem der Anzeige der ganzen Zeile. Das einzige, was ich wissen will ist, trennen Sie die verschiedenen Zeilen in verschiedenen textviews in einer recyclerview
    • Ich Verstand nicht, Sie tun das richtige in Ihrem onBindViewHolder der ADAPTER-Klasse. Können Sie etwas deutlicher, dass, wie Sie möchten, dass Ihre Daten angezeigt bekommen ? und auch, was Sie bekommen derzeit ?
    • Ich bin aktuell sehen die Daten wie: Total_Social_Beta_TestersTest_Group. Ich will es anzeigen wie diese:. Total_Social_Beta_Testers und Test_Group werden separat angezeigt. Nicht zusammen.
    • Ich habe 2 Zeilen, und ich möchte die Anzeige einer Zeile pro text anzeigen
    • du meinst den Wert von Gruppen.getTitle() ist „Total_Social_Beta_TestersTest_Group“ ? Und Sie wollen, um ihn in Ihre TextField-Gruppe . Und die Ausgabe shuould werden row1 = Total_Social_Beta_Testers und row2 = Test_Group ? Bin ich richtig ?
    • Richtig. Das ist wollen ich möchte.
    • Groups groups = chatlist.get(position); String myGroupArray = groups.getTitle().split(""); holder.group.setText(myGroupdArray[0]); holder.group.setText(myGroupArray[1]); Versuchen, diesen code in deine onBindViewHolder() in den adapter. Sorry für die schlechte Formatierung, ich weiß nicht, zu verwenden <br> in den Kommentaren hier :D. Anyway, schauen Sie und lassen Sie mich wissen,
    • Ich erhalte eine Fehlermeldung String myGroupArray = groups.getTitle().split(""); . Es sagt inkompatible Typen. Es erwartet einen string, nicht string[]
    • sorry, mein Fehler, immer Noch verschlafen 😀 . anstelle des String-myGroupArray = Gruppen.getTitle().split(„“); verwenden, String myGroupArray[ ] = Gruppen.getTitle().split(„“);
    • Es arbeitete. Aber, ich bin nur zu sehen, den ersten Buchstaben der Zeile. Nicht die ganze Zeile.
    • Groups groups = chatlist.get(position); String myString = groups.getTitle().substring(0,25); String mySecondString = groups.getTitle().substring(25); holder.group.setText(myString); holder.group.setText(mySecondString); Anstelle von meinem vorherigen Kommentar, es nutzen, Aber dies wird nur funktionieren, falls der string Total_Social_Beta_TestersTest_Group , wenn Sie etwas anderes wollen, müssen Sie regex java split . Sie können google, dass später, zuerst versuchen, diese
    • Muss ich String mystring = groups.toString().substring(0,25)?
    • Es funktioniert nicht. Es zeigt Test_Group zweimal.
    • Ist dies das problem? Ich habe auf meinen main-Aktivität: for (int i = 0; i < rows; i++){Groups groups = new Groups(g);groupslist.add(groups);}
    • for (int i = 0; i < Zeilen; i++){Gruppen = neue Gruppen(g);Gruppenlisten.add(Gruppen);} . Das macht keinen Sinn, Bruder, warum sind Sie versuchen, fügen Sie n der Gruppen in der Gruppen-Liste ? Und was ist g ?
    • g wird die variable I erstellt, in der Sitzung String g = user.get(UserSessionManager.KEY_GROUPS);
    • Und ich möchte die display – n Gruppen, weil ich eine Liste von verschiedenen Gruppen pro Zeile.
    • Ich habe versucht, Ihre Methoden und die zweite Zeichenfolge erscheint immer. Ich möchte die Anzeige der 2-Werte in der JASON-array in einen recycler veiw.

  2. 0

    Sollten Sie eine ArrayList<String> aus diesem JSONArray und verwenden Sie diese List füllen Sie Ihre RecyclerView,

     ArrayList<String> listdata = new ArrayList<String>();
     if (jArray != null) { 
         for (int i=0;i<jArray.length();i++)
               listdata.add(jsonArrayGR.getString(i));
     } 

    Nun kannst du diese List zu Ihrem MainActivity und füllen Sie Ihre RecyclerView, die erforderlich ist, um Sie.

    In current Activity ->
    
    Bundle extra = new Bundle();
    extra.putSerializable("list", listdata);
    
    Intent intent = new Intent(getBaseContext(), MainActivity.class);
    intent.putExtra("extra", extra);
    
    In Mainactivity ->
    
    Bundle extra = getIntent().getBundleExtra("extra");
    ArrayList<Object> objects = (ArrayList<Object>) extra.getSerializable("objects")
    • Ich habe nicht den Papierkorb anzeigen und die JSON-auf der gleichen Seite
    • Sie sind mit putExtra() zum senden von Daten an Ihre RecyclerView, hab ich Recht?
    • Ich bin mit putExtra (), um die Daten auf die MainActivity
    • Wo sind Sie füllen die Daten in die RecyclerView im MainActivity oder woanders?
    • Ich bin so in Haupttätigkeit: for (int i = 0; i < 20; i++){ Gruppen = neue Gruppen(g); Gruppenlisten.add(Gruppen); }
    • So können Sie diese List im MainActivity, dann füllen Sie Ihre RecyclerView.
    • Aber, ich bin mit einer anderen Klasse zum speichern der Variablen
    • Sie übergeben können, die diese arraylist-wie andere Saiten, die Sie auf der Durchreise sind UserSession. Dann sehen Sie sich diese, wie Sie das in der arraylist zu shared preferences.
    • Ich habe es versucht. Ich kann es nicht.
    • Vielen Dank für Ihre Hilfe. Ich habe eine bessere Lösung gefunden, obwohl. Vielen Dank für die Zeit nehmen, zu reagieren. Vielen Dank, @jack jay

  3. 0

    in Ihrer app.gradle, fügen Sie diese Zeile unter Abhängigkeiten

    compile 'com.google.code.gson:gson:2.3'

    und synchronisieren Sie Ihr Projekt.

    Erstellen Sie nun eine .java – Datei mit dem Namen GroupsModal.java


    fügen Sie diese in Ihre GroupsModal.java Datei

    private Groups groups;
    
    //getters and setters

    Erstellen Sie nun eine .java – Datei mit dem Namen Groups.java
    und fügen Sie folgende Zeilen :

    private String Total_Social_Beta_Testers;
    //getters and setters

    nun in loginActivity.java

    @Override
            public void onResponse(String response) {
     GroupsModal groupsModal = gson.fromJson(response, GroupsModal.class);
    
    if(groupsModal.getSuccessResponse == 200){
      //successfully logged in
     /*
     * you can create classes and variables according to your JSON here
     * for gson.fromJson,
     * define at the top of loginActivity,
     * private Gson gson = new Gson();
     */
    }
    }

    Hoffe es hilft..

    • Okay. Ich noch nicht bekommen. Etwas, aber nicht alles. Btw. Ich habe bereits eine Datei namens Groups.java
    • GSON ist eine Bibliothek, die uns hilft, in das Parsen von JSON einfach. Wenn u erhalten die Antwort von der API und den geben Sie in Ihrer Antwort GroupsModal.java Datei, sucht für die Schlüsselwort – Gruppen, die in dieser Datei, und sobald es Sie findet, wird es beginnen die Analyse, wenn er die passenden Schlüssel aus dem API-und Ihre Datei. Das ist alles bro.. Versuchen Sie, den code, Hopefull, erhalten Sie eine Ausgabe.
    • Vielen Dank für deine Hilfe, aber es funktioniert nicht 🙁
    • Hmmm… und was war der Fehler???
    • wenn(groupsModal.getSuccessResponse == 200){
    • Nein Nein.. ich habe Kopie von deiner Frage, dachte ich, u müssen einige Felder, die unter die Gruppe-array mit dem Namen „successResponse“, so die getter-und setter-wäre für getSuccessResponse() und setSuccessResponse() u definieren Sie Ihre Variablen auf.. und Sie können suchen, für video-tutorials auf Gson , dort können Sie lernen, besser hoffe ich. überprüfen Sie diesen link für den Verweis link
    • Aus meine Frage, wenn ich die Schleife durch das array, es wird immer die Letzte variable.

  4. 0

    JS:

    String[] getStringArray(String name, JSONObject object) throws JSONException {
      JSONArray jsonArray = object.getJSONArray(name);
      String[] array = new String[jsonArray.length()];
      for (int i = 0; i < jsonArray.length(); i++){
        array[i] = jsonArray.getString(i);
      }
      return array;
    }

    • Fehler: Objekt.getJSONArray(name); und jsonArray.getString(i) Fehler:(100, 58) error: unreported exception JSONException; muss abgefangen werden oder erklärt werden geworfen
    • Danke!!! Ich habe eine bessere Lösung gefunden. Vielen Dank für die Zeit nehmen, die Antwort aber. Schätzen es wirklich.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.