从View元素创建一个字符串

时间:2014-04-18 03:16:43

标签: android seekbar

我的主要活动中有两个搜索栏,但我一次只能使用其中一个,因此我需要检索值seekbarxseekbary,将它们中的任何一个存储在字符串变量中向前使用它我已经使用了onProgressChangeonStopTrackingTouch,但我想它并没有足够长的时间。 这就是我对搜索栏的看法

        package edu.itdurango.servocontrolyun;

        import java.io.BufferedReader;
        import java.io.IOException;
        import java.io.InputStreamReader;
        import java.net.MalformedURLException;
        import java.net.URL;
        import java.net.URLConnection;
        import java.util.concurrent.ArrayBlockingQueue;
        import java.util.concurrent.atomic.AtomicBoolean;

        import org.apache.http.HttpResponse;
        import org.apache.http.client.ClientProtocolException;
        import org.apache.http.client.HttpClient;
        import org.apache.http.client.methods.HttpGet;
        import org.apache.http.impl.client.DefaultHttpClient;
        import org.json.JSONObject;

        import android.app.Activity;
        import android.os.Bundle;
        import android.util.Log;
        import android.view.Menu;
        import android.view.View;
        import android.widget.SeekBar;
        import android.widget.TextView;
        import android.widget.SeekBar.OnSeekBarChangeListener;


 public class MainActivity extends Activity {
// TODO: adjust ARDUINO_IP_ADDRESS
public final String ARDUINO_IP_ADDRESS = "192.168.1.71";    //Dirección IP del Arduino Yun
public final String TAG = "ArduinoYun";
public String servo;

private SeekBar SeekBarX;                                   //Barra de búsqueda del eje X
private SeekBar SeekBarY;                                   //Barra de búsqueda del eje Y


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

    SeekBarX = (SeekBar) findViewById(R.id.barraEjeX);
    /*SeekBarX.setOnClickListener(new View.OnClickListener() {

        public void onClick(View barraEjeX) {
            servo = "servox/";

        }
    });*/
    SeekBarX.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
        @Override
        public void onStopTrackingTouch(SeekBar barraEjeX) {
        }
        @Override
        public void onStartTrackingTouch(SeekBar barraEjeX) {
        }
        @Override
        public void onProgressChanged(SeekBar barraEjeX, int progressX,
                boolean fromUser) {
            servo = "servox/";
            log("touching X bar. servo = " + servo);                
            QueueX.offer(progressX);
        }
    });

    SeekBarY = (SeekBar) findViewById(R.id.barraEjeY);
    /*SeekBarY.setOnClickListener(new View.OnClickListener() {

        public void onClick(View barraEjeY) {
            servo = "servoy/";

        }
    });*/
    SeekBarY.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {         
        @Override
        public void onStopTrackingTouch(SeekBar barraEjeY) {
        }
        @Override
        public void onStartTrackingTouch(SeekBar barraEjeY) {
        }
        @Override
        public void onProgressChanged(SeekBar barraEjeY, int progressY,
                boolean fromUser) {
            servo = "servoy/";
            log("touching Y bar. servo = " + servo);
            QueueY.offer(progressY);
        }
        });

}


@Override
protected void onStart() {
    mStop.set(false);
    if(sNetworkThreadSend == null){
        sNetworkThreadSend = new Thread(mNetworkRunnableSend);
        sNetworkThreadSend.start();
    }
    super.onStart();
}

@Override
protected void onStop() {
    mStop.set(true);
    QueueX.clear();
    QueueX.offer(-1);
    QueueY.clear();
    QueueY.offer(-1);
    if(sNetworkThreadSend != null) sNetworkThreadSend.interrupt();
    super.onStop();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public void log(String s){
    Log.d(">==< "+TAG+" >==<", s);
}

private ArrayBlockingQueue<Integer> QueueX = new ArrayBlockingQueue<Integer>(100);
private ArrayBlockingQueue<Integer> QueueY = new ArrayBlockingQueue<Integer>(100);
private AtomicBoolean mStop = new AtomicBoolean(false);

private static Thread sNetworkThreadSend = null;
private final Runnable mNetworkRunnableSend = new Runnable() {

    @Override
    public void run() {
        log("starting network thread for sending");  
        String urlBase = "http://"+ARDUINO_IP_ADDRESS+"/arduino/"+servo;
        String url;

        try {
            while(!mStop.get()){
                int val;
                if (servo == "servoy/"){
                    val = QueueY.take();
                        if(val >= 0){
                            HttpClient httpClient = new DefaultHttpClient();
                            url = urlBase.concat(String.valueOf(val));
                            log("executing httpClient request");
                            HttpResponse response = httpClient.execute(new HttpGet(url));
                            log(url);
                    }
                }  
                if (servo == "servox/"){
                    val = QueueX.take();
                        if(val >= 0){
                            HttpClient httpClient = new DefaultHttpClient();
                            url = urlBase.concat(String.valueOf(val));
                            log("executing httpClient request");
                            HttpResponse response = httpClient.execute(new HttpGet(url));
                            log(url);
                    }
                }
            }

        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        log("returning from network thread for sending");
        sNetworkThreadSend = null;
    }
};  
private static Thread sNetworkThreadReceive = null;
private final Runnable mNetworkRunnableReceive = new Runnable() {

    @Override
    public void run() {
        log("starting network thread for receiving");

        String url = "http://"+ARDUINO_IP_ADDRESS+"/data/get/D9";

        while(!mStop.get()){
            try {
                String string = readURL(url);
                String value = "";
                try {
                    JSONObject jsonMain = new JSONObject(string);
                    value = jsonMain.get("value").toString();
                    log("value = "+value);

                } catch (Exception e) {
                    e.printStackTrace();
                }
                updateText(value);

                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        log("returning from network thread for receiving");
        sNetworkThreadReceive = null;
    }
}; 
public void updateText(final String value){
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            TextView textView = (TextView) findViewById(R.id.textView1);
            textView.setText(value);
        }
    });

} 

public String readURL(String value){
    URL url;
    StringBuilder builder = new StringBuilder();
    try {
        url = new URL(value);
        URLConnection yc = url.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null){ 
            builder.append(inputLine);
        }
        in.close();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return builder.toString();
}

}

它在LogCat touching Y bar. servo = servoy/中打印,但是当我想使用伺服值时,它会打印null。 如何保存此字符串的值?

0 个答案:

没有答案