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.