Android: Remplissage ListView avec ArrayAdapter dans AsyncTask -> Affiche qu'un seul élément
Je suis le remplissage d'une ListView avec ArrayAdapter dans une AsyncTask.
Mais à chaque fois il ne se remplit en un article.
Quelqu'un pourrait-il m'expliquer pourquoi?
onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.connected_download);
Log.v("string", "test6");
runOnUiThread(new Runnable() {
public void run() {
str_profil = getIntent().getStringExtra("profil");
str_server = getIntent().getStringExtra("server");
str_port = getIntent().getStringExtra("port");
str_user = getIntent().getStringExtra("user");
str_password = getIntent().getStringExtra("pw");
new connection_test().execute();
}
});
}
AsyncTask
private class connection_test extends AsyncTask<String, Void, String> {
protected void onPreExecute(){
dialog = ProgressDialog.show(connected_download.this, null, "Erstelle Vorschau. Bitte warten...");
}
protected String doInBackground(String... connection) {
listftpitems();
return null;
}
protected void onPostExecute(String result) {
dialog.dismiss();
}
}
listftpitems
public void listftpitems(){
try {
ftpClient.setConnectTimeout(15000);
Integer int_port = Integer.parseInt(str_port);
ftpClient.connect(InetAddress.getByName(str_server), int_port);
ftpClient.login(str_user, str_password);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
System.out.println("status :: " + ftpClient.getStatus());
System.out.println("FTPClient : " + "Offen");
} catch (Exception e) {
e.printStackTrace();
}
final ArrayList<String> your_array_list = new ArrayList<String>();
final ListView lv = (ListView) findViewById(R.id.list_download);
final FTPFile[] files;
try {
files = ftpClient.listFiles();
for (FTPFile file : files) {
String details = file.getName();
your_array_list.add(details);
Log.v("string", details);
}
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(connected_download.this,android.R.layout.simple_list_item_1, your_array_list);
runOnUiThread(new Runnable() {
public void run() {
lv.setAdapter(arrayAdapter);
}
});
}catch (IOException e1) {
e1.printStackTrace();
}
}
LogCat (prendre un coup d'oeil dans le Journal.v("string"); sur listftpitems) pour sa correcte
12-05 11:34:24.650: D/AbsListView(23249): Get MotionRecognitionManager
12-05 11:34:24.650: V/string(23249): test6
12-05 11:34:24.695: D/dalvikvm(23249): GC_FOR_ALLOC freed 64K, 9% free 13420K/14599K, paused 13ms, total 15ms
12-05 11:34:24.945: D/dalvikvm(23249): GC_CONCURRENT freed 29K, 8% free 13813K/14983K, paused 11ms+5ms, total 28ms
12-05 11:34:25.480: I/System.out(23249): status :: 211-Status of 'ProFTPD'
12-05 11:34:25.480: I/System.out(23249): Connected from 213.55.184.193 (213.55.184.193)
12-05 11:34:25.480: I/System.out(23249): Logged in as ftp031220
12-05 11:34:25.480: I/System.out(23249): TYPE: BINARY, STRUcture: File, Mode: Stream
12-05 11:34:25.480: I/System.out(23249): No data connection
12-05 11:34:25.480: I/System.out(23249): 211 End of status
12-05 11:34:25.480: I/System.out(23249): FTPClient : Offen
12-05 11:34:26.095: V/string(23249): anon_ftp
12-05 11:34:26.095: V/string(23249): bin
12-05 11:34:26.095: V/string(23249): cgi-bin
12-05 11:34:26.095: V/string(23249): conf
12-05 11:34:26.095: V/string(23249): error_docs
12-05 11:34:26.095: V/string(23249): httpdocs
12-05 11:34:26.095: V/string(23249): httpsdocs
12-05 11:34:26.095: V/string(23249): mivadata
12-05 11:34:26.095: V/string(23249): pd
12-05 11:34:26.095: V/string(23249): private
12-05 11:34:26.095: V/string(23249): statistics
12-05 11:34:26.095: V/string(23249): subdomains
12-05 11:34:26.095: V/string(23249): vault_scripts
12-05 11:34:26.095: V/string(23249): web_users
image à partir de mon téléphone
OriginalL'auteur Marco Seiz | 2012-12-05
Vous devez vous connecter pour publier un commentaire.
vous faites tout dans le code actuel avec un mauvais chemin, comme vous essayez d'Utiliser
runOnUiThread
dedoInBackground
.modifier votre code comme:Changement listftpitems:
Changement AsyncTask:
Changement de votre Activité onCreate:
et plz lire certains de base d'Android à partir de :
http://developer.android.com/guide/components/index.html
signifie simplement changer
AsyncTask<String, Void, String>
àAsyncTask<String, Void, ArrayList<String>>
cela permettra d'assurer que le travail mais je ne suis pas l'exécution de votre code sur ma fin, alors peut-être si court de problème se produit, mais ce est la bonne façon de l'utiliser AsyncTask dans votre application.Merci beaucoup
Le Code n'est pas en panne ou quoi que ce soit. Mais il n'y a toujours qu'un SEUL élément dans ma liste :-/
C'était une erreur de mise en page... Merci pour votre aide et montrant comment utiliser asynctask correctement 🙂
OriginalL'auteur ρяσѕρєя K
essayer l'extrait de code ci-dessous.
Ici votre Méthode.
OriginalL'auteur Bhavesh Patadiya
Il y a un seul
journal, ce qui signifie que la boucle s'exécute une seule fois. Vérifier si
retourne plus d'un fichier.
Log.v("string", "test6");
est exécuté qu'une seule fois. vous devez regarder laLog.v("string", details);
sur listftpitems fonctionOriginalL'auteur asloob