La fonctionnalité de base de l'application est d'obtenir des données en temps réel à partir d'un fichier .csv présent sur un serveur FTP (Note: Le fichier .csv sur le serveur continue de mettre à jour simultanément) et afficher les valeurs .La dernière valeur ne semble pas être mise à jour. Seulement quand je ferme et rouvre l'application, je peux voir la dernière valeur affichée.
Je réussis à me connecter au serveur FTP et à analyser le fichier .csv pour afficher toutes les valeurs enregistrées sur le graphique. Mais, la dernière valeur ne semble pas être mise à jour sur le graphique. Seulement quand je ferme et rouvre l'application, je peux voir la dernière valeur affichée sur le graphique.
J'ai essayé le code suivant sans succès:
/*
* Connects to a remote FTP server
*/
void connectToFTP() {
try {
mFTPClient = new FTPClient();
mFTPClient.connect(FTP_HOSTNAME, FTP_PORT);
returnCode = mFTPClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(returnCode)) {
throw new IOException("Could not connect");
}
boolean loggedIn = mFTPClient.login(FTP_USER, FTP_PASSWORD);
if (!loggedIn) {
throw new IOException("Could not login");
}
System.out.println("Connected and Logged in");
statusUpdate.setText("Connected to FTP Server");
mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
mFTPClient.enterLocalPassiveMode();
} catch (Exception e) {
e.printStackTrace();
}
}
void beginListenForData() throws IOException {
final Handler handler = new Handler();
final byte delimiter = 10; //This is the ASCII code for a newline character
stopWorker = false;
readBufferPosition = 0;
readBuffer = new byte[1024];
mmInputStream = mFTPClient.retrieveFileStream(fileName);
workerThread = new Thread(new Runnable() {
public void run() {
while (!Thread.currentThread().isInterrupted() && !stopWorker) {
try {
Log.i("Inside begindata ", "data " + count++);
int bytesAvailable = mmInputStream.available();
if (bytesAvailable > 0) {
byte[] packetBytes = new byte[bytesAvailable];
mmInputStream.read(packetBytes);
for (int i = 0; i < bytesAvailable; i++) {
byte b = packetBytes[i];
if (b == delimiter) {
byte[] encodedBytes = new byte[readBufferPosition];
System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length);
final String data = new String(encodedBytes, "US-ASCII");
readBufferPosition = 0;
handler.post(new Runnable() {
public void run() {
myLabel.setText(data);
String s = data;
String[] values = data.split(",");
Log.i("Text ", "data " + values[3]);
datalist.add(values[3]);
power.setText(values[3]);
}
});
} else {
readBuffer[readBufferPosition++] = b;
}
}
// dataPoints();
}
} catch (IOException ex) {
stopWorker = true;
}
}
}
});
workerThread.start();
}
stockez vos valeurs analysées dans la base de données SQLite et actualisez les données à l'aide des fournisseurs de contenu. –
Je suis nouveau sur Android et SQLite. Pouvez-vous s'il vous plaît montrer un exemple? –