Привет, я сделал простое приложение в Android, которое подключается к серверу и получает список сообщений, после чего у меня есть spinner
, который заполняется заголовком каждого сообщения, и вы можете выбрать один из них.Spinner не отображает выбранный элемент
Все работает до тех пор, пока я не должен выбрать сообщение, я открываю spinner
, он показывает все названия, которые я выбираю, и ничего не происходит, сообщение не выбрано в spinner
, и тексты не меняются Я читал, как 10 постов о блесны не показаны элементы, но я не мог заставить его работать, пожалуйста, помогите мне, это мой Java-код:
package com.example.lagarto.blog;
import android.graphics.Color;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import org.w3c.dom.Text;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import android.util.Log;
import android.widget.Spinner;
public class MainActivity extends AppCompatActivity {
ArrayList<Post> archivo=new ArrayList<Post>();
ArrayList<String> titulos=new ArrayList<String>();
public ArrayAdapter<String> spinnerArrayAdapter;
private static final String TAG= MainActivity.class.getSimpleName();
private class GetDBConnection extends AsyncTask<Integer, Void, String>{
@Override
protected String doInBackground(Integer... params) {
try{
Connection conn= DBConnection.getInstance().getConnection();
Statement st= conn.createStatement();
String sql=("SELECT * FROM posts");
ResultSet rs=st.executeQuery(sql);
while(rs.next()) {
int id = rs.getInt("Id");
String title = rs.getString("Title");
String body = rs.getString("Body");
String date = rs.getString("Date");
Post post = new Post(id, title, body, date);
archivo.add(post);
System.out.println(archivo);
}
Log.d(TAG,"Terminado");
}catch(SQLException e){
e.printStackTrace();
}
return "Valido";
}
@Override
protected void onPostExecute(String result) {
Spinner spinner=(Spinner) findViewById(R.id.spinner);
spinner.setVisibility(View.VISIBLE);
for (Post i:archivo) {
titulos.add(i.getTitle());
}
TextView title=(TextView) findViewById(R.id.title);
TextView body=(TextView) findViewById(R.id.body);
title.setVisibility(View.VISIBLE);
body.setVisibility(View.VISIBLE);
TextView connection=(TextView) findViewById(R.id.connection);
connection.setVisibility(View.INVISIBLE);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
spinnerArrayAdapter.notifyDataSetChanged();
Post resultado=archivo.get(position);
title.setText(resultado.getTitle());
body.setText(resultado.getBody());
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
spinnerArrayAdapter.notifyDataSetChanged();
Post resultado=archivo.get(0);
title.setText(resultado.getTitle());
body.setText(resultado.getBody());
}
});
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new GetDBConnection().execute(0);
Spinner spinner=(Spinner) findViewById(R.id.spinner);
spinnerArrayAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, titulos);
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(spinnerArrayAdapter);
spinner.setSelection(1);
System.out.println(archivo);
}
}
И это мой XML-код:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.lagarto.blog.MainActivity">
<TextView
android:layout_width="400dp"
android:layout_height="50dp"
android:text="Hello World!"
android:textSize="30dp"
android:textAlignment="center"
android:layout_alignParentEnd="true"
android:id="@+id/title"
android:layout_marginTop="40dp"
android:visibility="invisible"
/>
<TextView
android:layout_width="400dp"
android:layout_height="500dp"
android:text="Hello World!"
android:textSize="16dp"
android:layout_marginTop="100dp"
android:layout_alignParentEnd="true"
android:id="@+id/body"
android:visibility="invisible"
/>
<Spinner
android:layout_width="400dp"
android:layout_height="50dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:id="@+id/spinner"
android:textSize="20dp"
android:visibility="invisible"
android:backgroundTint="@color/colorPrimaryDark"
android:textAlignment="center"
/>
<TextView
android:text="Waiting for connection please wait"
android:layout_width="400dp"
android:layout_height="100dp"
android:textSize="30dp"
android:textAlignment="center"
android:layout_marginTop="150dp"
android:id="@+id/connection" />
</RelativeLayout>
Я думаю, было бы лучше, если бы вы положили 'spinner.setOnItemSelectedListener' на' onCreate'. Вы должны сконцентрироваться на фоновом процессе для получения данных. – cipley
Это не исправляет ошибку:/ –
Нечетный ... вы получаете какой-либо logcat после завершения 'onPostExecute'? – cipley