2016-01-21 7 views
5

Próbuję odczytać plik .txt ze skrzynki referencyjnej z publicznym udostępnionym łączem. Co chcę zrobić, to przeczytać .txt i wyświetlić wszystkie dane w tym pliku na liście w Androidzie.Czytanie pliku .txt z udostępnionego powiązanego z Dropbox studia Androida

http://txt.do/5zflt (nie mam dostępu do spadku na mojego obecnego komputera, więc chcę użyć tego linku jako przykład)

Plik nazywa PersonStatus że będzie coś zawiera tekst wzdłuż linii;

Online 
Offline 
Active 
Holidays 
…. 
…. 
… 
… 
… 
… 

zasadzie to, co chcę zrobić jest używany współdzielonego łącza skrzynki domyślnej czytać ten tekst i wyświetli go w moim ListView na Android, ale nie jestem pewien, w jaki sposób można podejść do tego. Szukałem w Internecie poradników i przewodników, ale będąc nowym dla Androida, nie byłem w stanie znaleźć czegoś przydatnego;

Na przykład znalazłem ten link: Read a file from dropbox, gdzie PO zadał podobne pytanie, ale nie podał wystarczającego kodu, aby zrozumieć, w jaki sposób mogę się do tego podejść. Również dzięki moim badaniom okazało się, że Dropbox ma interfejs Android Sync API: https://www.dropbox.com/developers-v1/sync/start/android, ale będąc nowicjuszem w programowaniu, nie jestem pewien, jak go wdrożyć i sprawić, by działał.

Byłbym bardzo wdzięczny, gdyby ktoś mógł pomóc. Z góry dziękuję. Jeśli moje pytanie nie było jasne, daj mi znać, a postaram się wyjaśnić to lepiej.

Odpowiedz

5

kładę here na GitHub przykładowy projekt realizacji scenariusza opisanego (ja również umieścić plik publicznego ze strukturą zgłoszono here na Dropbox). Wewnątrz projektu można znaleźć następujące główne elementy:

  1. główną działalność - obejmuje on RecyclerView że zostanie wypełnione rzędami treści pliku. Aby uzyskać zawartość pliku, działanie opiera się na zatrzymanym fragmencie, umożliwiając zachowanie zadania pobierania w przypadku rotacji ekranu (więcej informacji na temat zmian konfiguracji można znaleźć na stronie here). Plik jest pobierany automatycznie zaraz po utworzeniu działania, ale można wymusić ponowne pobranie za pomocą przycisku SYNC na pasku akcji.
  2. PobierzFragment - Jest to zachowany fragment, który owija AsyncTask używany do pobierania pliku. Dostarcza on Callback zaimplementowany przez MainActivity do obsługi określonych zdarzeń występujących podczas pobierania (np. OnPrepare, onProgress, onDownloadCompleted, onDownloadFailed). Możesz ich używać na przykład do wyświetlania paska postępu lub innych informacji zwrotnych dla użytkownika.
  3. FileContentAdapter - Jest to adapter używany do wyświetlania zawartości pliku wewnątrz RecyclerView.

pewnymi ograniczeniami

  • Ta aplikacja nie skupia się na Dropbox. Jeśli plik jest publiczny w Internecie, możesz go pobrać niezależnie od tego, kto go hostuje. Jeśli Twoim celem jest utrzymywanie aktywności automatycznie synchronizowanej z plikiem na Dropbox, prawdopodobnie lepiej byłoby wykorzystać pakiet SDK Dropbox, w szczególności jeśli planujesz uzyskać dostęp do plików, które są prywatne w Dropbox.
  • AsyncTask implementacja powinna zostać ulepszona, na przykład poprzez wdrożenie zarządzania WakeLock.
+0

Czy byłoby możliwe dodanie funkcji, która zapisuje dane w pliku odczytanym z pamięci na telefonie użytkownika jako pamięci podręcznej, a następnie wyszukuje tylko aktualizacje z pliku dropbox, ponieważ pozwoli to użytkownikowi uzyskać dostęp do informacji bez konieczności połączenia z Internetem – Henry

+0

Próbowałem teraz wygląda świetnie! – Henry

+0

@Henry Well ... tak, możliwe jest zachowanie lokalnej kopii pliku. Jedynym problemem jest to, że prawdopodobnie musisz zaimplementować okresowe pobieranie plików w tle, aby dokonać porównań między bieżącą wersją a wersją lokalną. Jeśli Twój cel ma korzystać z Dropbox, być może lepiej przyjrzeć się zestawowi SDK Dropbox, zarówno do obsługi uwierzytelniania (w razie potrzeby), jak i do łatwiejszego pobierania aktualizacji. Jako pierwszy krok mogę spróbować zmodyfikować kod do lokalnego przechowywania plików. – thetonrifles

2

W moich aplikacjach używam tego kodu, aby uzyskać zawartość współdzielonego pliku skrzynki. Ten kod nazywam wewnątrz AsyncTask.

Edited: Oto przykład

public class DropboxSampleActivity extends Activity { 

private ListView listViewDropbox; 
private ArrayAdapter<String> adapter = null; 
private static String URL_FILE_DROPBOX = "https://www.dropbox.com/s/xxxxxxxxxxxx/xxxxxxxxxxxx?dl=1"; 
private ArrayList<String> listElementItem; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    setContentView(R.layout.activity_dropbox_list); 

    super.onCreate(savedInstanceState); 
    listViewDropbox = (ListView) findViewById(R.id.listViewDropbox); 
    DropboxItemAsyncTask dropboxItemAsyncTask = new DropboxItemAsyncTask(); 
    dropboxItemAsyncTask.execute(); 
} 

class DropboxItemAsyncTask extends AsyncTask { 

    protected Integer doInBackground(Object[] params) { 

     try { 
      listElementItem = new ArrayList<>(); 
      URLConnection conn = new URL(URL_FILE_DROPBOX).openConnection(); 
      conn.connect(); 
      InputStream is = conn.getInputStream(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        is, "UTF-8"), 8); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       listElementItem.add(line); 
      } 
      is.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 


    @Override 
    protected void onPostExecute(Object o) { 
     if (adapter == null) { 
      adapter = new ArrayAdapter(DropboxSampleActivity.this, 
        android.R.layout.simple_list_item_1, listElementItem); 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        listViewDropbox.setAdapter(adapter); 
       } 
      }); 
     } else { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        adapter.notifyDataSetChanged(); 
       } 
      }); 

     } 
    } 
}; 

}

+0

Witam, przepraszam za spóźnioną odpowiedź. Nie jestem pewien, jak działa AsyncTask lub jak mogę go napisać. Proszę, możesz mi pomóc. – Henry

+0

Ponadto, gdy czytasz plik z Dropbox, używając tego, czy czyta on co sekundę lub czyta go raz, a następnie czyta tylko następnym razem, gdy plik jest aktualizowany/dodano więcej tekstu. – Henry

+0

i jak wyświetlić tekst po przeczytaniu go, będę wyświetlał go w widoku listy. Czy robisz coś podobnego? – Henry