Hirdetés

Új hozzászólás Aktív témák

  • domel

    tag

    Igazatok volt a text fájl internetes letöltésében, UI szálon esélytelen, találtam is működő példát, az valahogy async eljárásban tölt le az internetről. Az alábbi kóddal szenvedtem pár órát, egy Delphi-ben ismeretlen problémám volt, mutatom:
    (van egy weboldalon egy counter.txt fájl, amiben a számot egy mozgásérzékelő növel ha változás van, akkor lejátszik egy másodperces hangot a telefon)

    package com.example.csabi.gondolok;

    import android.media.MediaPlayer;
    import android.os.AsyncTask;
    import android.os.Handler;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.TextView;
    import android.widget.Toast;

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.Random;

    public class MainActivity extends AppCompatActivity {
    String textResult;
    String egyik;
    String masik;
    MediaPlayer mySound;
    private Handler handler = new Handler();
    Random rand = new Random();

    public Runnable r = new Runnable() {
    @Override
    public void run() {
    TextView mtextview = (TextView) findViewById(R.id.mTextView);
    mtextview.setText(egyik+"---"+masik);

    if (egyik != masik){
    mySound.start();
    masik = egyik;
    }
    new MyTask().execute();
    handler.postDelayed(this,5000);
    }
    };



    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mySound = MediaPlayer.create(this,R.raw.sound3);

    Thread lessThread = new Thread(r);
    lessThread.start();
    }

    public void frissit(View view) {
    }

    public void fressit(View view) {
    }


    private class MyTask extends AsyncTask<Void, Void, Void> {
    //String textResult;
    @Override
    protected Void doInBackground(Void... params) {
    URL textUrl;
    try {
    int n = rand.nextInt(9000);
    textUrl = new URL("http://www.spessart.hu/counter.txt?a="+Integer.toString(n));
    BufferedReader bufferReader
    = new BufferedReader(new InputStreamReader(textUrl.openStream()));
    String StringBuffer;
    String stringText = "";
    while ((StringBuffer = bufferReader.readLine()) != null) {
    stringText += StringBuffer;
    }
    bufferReader.close();
    textResult = stringText;
    } catch (MalformedURLException e) {
    e.printStackTrace();
    textResult = "*";//e.toString();
    } catch (IOException e) {
    e.printStackTrace();
    textResult = "*";//e.toString();
    }
    return null;
    }

    @Override
    protected void onPostExecute(Void result) {
    super.onPostExecute(result);
    egyik = textResult;
    int gz = Integer.parseInt(egyik);
    egyik = Integer.toString(gz);

    }
    }

    }

    Itt a végén
    egyik = textResult;
    int gz = Integer.parseInt(egyik);
    egyik = Integer.toString(gz);
    ha az "egyik = textResult" csak úgy simán, akkor öt másodpercenként pittyeg, hiába látom hogy például
    42---42 akkor is lefut az alábbi kód
    if (egyik != masik){
    mySound.start();
    masik = egyik;
    }
    Ez mitől van? A string tartalmazza a memóriacímet is??? Vagy bug?

    Üdv: Domel

Új hozzászólás Aktív témák