Text fájl letöltése
Tegyük fel, hogy van a szerverünkön egy text fájl a következő tartalommal:
data.txt
kicsi€$egy€$ketto nagy€$harom€$negy kozepes€$ot€$hat ennek€$annak€$amannak
Mint látjuk, az elemeket €$ karakterpárossal választottuk el. Most az lesz a feladat, hogy ha rákeresünk a közepes szóra, akkor az ot és hat szavakat kapjuk meg.
package a te package neved; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.SocketTimeoutException; import java.net.URL; import java.net.URLConnection; import java.util.Random; public class MainActivity extends AppCompatActivity { Thread tavol_load; Random tavol_rand = new Random(); String tavol_uids; TextView tavol_nev, tavol_url; TextView tavol_log; Integer tavol_folyamat=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tavol_log = (TextView)findViewById(R.id.textView); tavol_nev = (TextView)findViewById(R.id.textView2); tavol_url = (TextView)findViewById(R.id.textView3); tavol_uids="kozepes"; tavol_load = new Thread(lod); tavol_load.start(); } public Runnable lod = new Runnable() { @Override public void run() { int TIMEOUT_VALUE = 1000; int joe=0; tavol_folyamat=1; try { int n = tavol_rand.nextInt(9000); URL testUrl = new URL("http://www.spessart.hu/modal/data.txt?a=" + Integer.toString(n)); StringBuilder answer = new StringBuilder(100000); URLConnection aConnection = testUrl.openConnection(); aConnection.setConnectTimeout(TIMEOUT_VALUE); aConnection.setReadTimeout(TIMEOUT_VALUE); BufferedReader in = new BufferedReader( new InputStreamReader(aConnection.getInputStream(), "UTF-8")); String inputLine; while ((inputLine = in.readLine()) != null) { answer.append(inputLine); answer.append("\n"); } in.close(); String[] lunes; String[] lines = answer.toString().split("\n"); String keresett = tavol_uids; for (int i = 0; i < lines.length; i++) { lunes = lines[i].toString().split("€\\$"); if (lunes[0].equals(keresett)){ final String[] finalLunes = lunes; joe=1; runOnUiThread(new Runnable() { @Override public void run() { tavol_nev.setText(finalLunes[1]); tavol_url.setText(finalLunes[2]); tavol_log.setText("load ok"); tavol_folyamat=0; } }); break; } } } catch (SocketTimeoutException e) { joe=0; } catch (MalformedURLException e) { joe=0; } catch (IOException e) { joe=0; } if (joe==0)runOnUiThread(new Runnable() { @Override public void run() { tavol_log.setText("load error"); tavol_folyamat=0; } }); } }; }
A random szám az URL után azt a célt szolgálja, hogy ezzel kényszerítsük a szervert arra, hogy mindig letöltse a fájlt, mert a szervereknek ha többször ugyanazt kell letölteni, akkor bufferből kezdenek dolgozni, és ha a fájl közben megváltozott, akkor is a régebbi memóriában tárolt változatot kapjuk meg. Beállíthatunk még timeout-ot, és figyeljük meg, hogy a $ karakter különleges karakternek számít, ezért dupla-per karakter került elé. Mivel a letöltés künön szálon megy (UI szálon nem mehet), ezért az értékek kiírásához újra UI-ba megyek át.