안녕하세요 저는 서버에 연결하고 게시물 목록을 얻는 안드로이드의 간단한 응용 프로그램을 만들었습니다. 그러면 각 게시물의 제목으로 채워지는 spinner
이 있고 선택할 수 있습니다 그들 중 하나.Spinner가 선택한 항목을 표시하지 않습니다
게시물을 선택해야하는 시점까지는 모두 작동합니다. spinner
을 열면 하나만 선택하면 아무 것도 나타나지 않고 게시물이 spinner
에서 선택되지 않고 텍스트가 변경되지 않습니다. 나는 스피너는 항목을 표시되지하지만 그것이 작동하지 수 10 게시물처럼 읽을, 저를 도와주세요, 이건 내 자바 코드 :
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>
'onCreate'에'spinner.setOnItemSelectedListener'를 넣으면 더 좋을 것이라고 생각합니다. 데이터를 가져 오기위한 백그라운드 프로세스를 집중해야합니다. – cipley
버그를 수정하지 않습니다 :/ –
이상한 ...'onPostExecute'가 완료된 후에 logcat을 얻고 있습니까? – cipley