Я застрял здесь, где я хочу напечатать значение в Android, используя Textview. Но я получаю только последнюю строчку.
Здесь откликом является имя массива в кодировке JSON, которое я анализирую, и вся объявленная строка является атрибутом полученных данных, которые должны быть напечатаны в 4 текстовых представлениях с использованием линейного макета. Я беру данные из базы данных, используя PHP.
TextView textView1 = (TextView)findViewById(R.id.ID);
TextView textView2 = (TextView)findViewById(R.id.Name);
TextView textView3 = (TextView)findViewById(R.id.Department);
TextView textView4 = (TextView)findViewById(R.id.Semester);
jsonArray = jsonObject.getJSONArray("response");
String ID, Name, Department, Semester;
int i = 0;
while (i < jsonArray.length()) {
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
ID = jsonObject1.getString("ID");
textView1.setText(ID);
Name = jsonObject1.getString("Name");
textView2.setText(Name);
Department = jsonObject1.getString("Department");
textView3.setText(Department);
Semester = jsonObject1.getString("Semester");
textView4.setText(Semester);
i++;
}
У меня есть пять строк (кортеж) данных, и я хочу напечатать каждую строку в новой строке. Итак, во всех пяти строках должно быть 4 значения атрибута. Есть ли способ сделать это без сохранения данных.
Изменить: я должен напечатать 4 атрибута для того, чтобы иметь все 5 кортежа (строки). Значит мне нужно всего (4 X 5 =) 20 просмотр текста.
Проблема в том, что вы переопределяете содержание вашего textviews
с каждой итерации.
Вы должны попытаться добавить его к настоящему тексту, например:
textview.setText(textview.getText() + "some string")
Вы пробовали метод PDO fetchAll. Этот метод в основном получает все строки из базы данных в соответствии с запросом в формате массива.
Если я вас правильно понимаю, вы хотите иметь 4×5 = 20 просмотров текста.
Если вы одобряете это, вы должны использовать просмотр списка или просмотрщик для достижения этой цели.
Проблема в том, что вы зацикливаете свой jsonArray на textviews. На каждой итерации ваш textView получает значение, а на каждой новой итерации предыдущее значение вашего textView изменяется на новое значение jsonArray для следующего i-го индекса. Вы можете либо создать список textViews, либо создать представление переработчика, чтобы каждое новое значение jsonArray вставлялось и печаталось.
У вас есть только 4 TextView здесь, но вы хотите напечатать 5 человек. Если вы хотите, чтобы они были добавлены в эти 4 textView в формате:
ID: 1 2 3 …
Имя: Джон Майк Персона3 …
Отдел: Math CS Eng ..
Семестр: 1 2 3 ..
ты сделаешь:
jsonArray = jsonObject.getJSONArray("response");
String ID, Name, Department, Semester;
int i = 0;
while (i < jsonArray.length()) {
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
ID = jsonObject1.getString("ID");
textView1.setText(textView1.getText().toString() + " "+ ID);
Name = jsonObject1.getString("Name");
textView2.setText(textView2.getText().toString() + " "+ Name);
Department = jsonObject1.getString("Department");
textView3.setText(textView3.getText().toString() + " "+ Department);
Semester = jsonObject1.getString("Semester");
textView4.setText(textView4.getText().toString() + " "+ Semester);
i++;
}
Ключ должен получить существующий текст:
TextView textview1 = (TextView) findViewById(R.id.abbreviated);
String newText = jsonObject1.getString("Your_Field")
String oldText = textview1.getText().toString();
textview1.setText(oldText+ " " +newText);
Но если вы хотите список, который показывает каждого человека в отдельности, я рекомендую использовать RecyclerView :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:card_view="http://schemas.android.com/apk/res-auto">
<TextView
android:id="@+id/id"android:layout_width="wrap_content"android:layout_height="wrap_content" />
<TextView
android:id="@+id/name"android:layout_width="wrap_content"android:layout_height="wrap_content" />
<TextView
android:id="@+id/department"android:layout_width="wrap_content"android:layout_height="wrap_content" />
<TextView
android:id="@+id/semester"android:layout_width="wrap_content"android:layout_height="wrap_content" />
</android.support.v7.widget.CardView>
</LinearLayout>
Спасибо за то, что вы так щедры. Я искал эту проблему и нашел решение, используя TableLayout, который выглядел лучше и проще для меня. Вот код, который я даю, который я использовал.
Мой код XML:
<HorizontalScrollView
android:id="@+id/hscrll1"android:layout_width="fill_parent"android:layout_height="wrap_content" >
<RelativeLayout
android:layout_width="match_parent"android:layout_height="match_parent">
<TableLayout
android:id="@+id/table"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_below="@+id/textView">
</TableLayout>
</RelativeLayout>
</HorizontalScrollView>
и мой код JAVA — то, где я создал TableRow, Textview заполнил свои данные и добавил это.
TableLayout tableLayout = (TableLayout)findViewById(R.id.table);
jsonArray = jsonObject.getJSONArray("response");
String ID, Name, Department, Semester;
int i = 0;
while (i < jsonArray.length()) {
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
ID = jsonObject1.getString("ID");
Name = jsonObject1.getString("Name");
Department = jsonObject1.getString("Department");
Semester = jsonObject1.getString("Semester");
i++;
TableRow tableRow1 = new TableRow(this);
TextView tv1 = new TextView(this);
tv1.setText(ID);
tv1.setTextColor(Color.RED);
tv1.setGravity(Gravity.CENTER);
tv1.setTextSize(20.0f);
tableRow1.addView(tv1);
TextView tv2 = new TextView(this);
tv2.setText(Name);
tv2.setTextColor(Color.WHITE);
tv2.setGravity(Gravity.CENTER);
tv2.setTextSize(20.0f);
tableRow1.addView(tv2);
TextView tv3 = new TextView(this);
tv3.setText(Department);
tv3.setTextColor(Color.WHITE);
tv3.setGravity(Gravity.CENTER);
tv3.setTextSize(20.0f);
tableRow1.addView(tv3);
TextView tv4 = new TextView(this);
tv4.setText(Semester);
tv4.setTextColor(Color.WHITE);
tv4.setGravity(Gravity.CENTER);
tv4.setTextSize(20.0f);
tableRow1.addView(tv4);
tableLayout.addView(tableRow1);
}