2016-09-21 1 views
-1

アプリの基本機能は、FTPサーバーにある.csvファイルからリアルタイムデータを取得することです(注:サーバー上の.csvファイルは別のソースから同時に更新されます)。 。最新の値は更新されていないようです。アプリを終了してもう一度開くと、最新の値が表示されます。

FTPサーバーに接続して.csvファイルを解析し、ログに記録されたすべての値をグラフに表示することができました。しかし、最新の値はグラフ上で更新されていないようです。アプリを閉じて再度開くときにのみ、グラフに最新の値が表示されます。

は、私は成功せず、次のコードを試してみた:ダウンロード用

/* 
* 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(); 
} 
+1

SQLite DBに解析された値を格納し、コンテンツプロバイダを使用してデータを更新します。 –

+0

私はアンドロイドとSQLiteを初めて使っています。あなたは例を見せていただけますか? –

答えて

0

使用非同期タスクサーバーからデータをとonPostExecute方法でUIを更新します。

アクティビティの "onCreate"メソッドからこの非同期タスクを開始します。

+0

私はアンドロイドを初めて使っています。あなたは例を挙げてください。 –

関連する問題