如何从另一个类打印变量

时间:2017-04-21 07:29:31

标签: java android android-asynctask textview

我需要在TextView onCreate()方法中打印到可变电压和电流。电流和电压变量采用clientgetui()方法。

这是我的代码:

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Arrays;

public class getUI extends AppCompatActivity {

    String IP;
    TextView txtCurrent, textVoltage;


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

         IP = getIntent().getExtras().getString("IP");





       TextView txtCurrent = (TextView) findViewById(R.id.textViewCurrent);
       TextView textVoltage = (TextView) findViewById(R.id.textViewVoltage);

       // txtCurrent.setText(String.valueOf(current));

        Button buttongetvalue = (Button) findViewById(R.id.buttongetUI);
        buttongetvalue.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try{
                    new AsynctaskgetUI().execute();
                }catch (Exception e){

                }


            }
        });


    } //ONCREATE!



        public class AsynctaskgetUI extends AsyncTask<Void, Integer, Void> {


            public int mVoltage;
            public int mCurrent;

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }

            @Override
            protected void onPostExecute(Void aVoid) {
                super.onPostExecute(aVoid);
            }

            @Override
            protected void onProgressUpdate(Integer... values) {
                super.onProgressUpdate(values);

            }

            @Override
            protected Void doInBackground(Void... voids) {
                try {
                    clientgetui();
                } catch (IOException e) {
                    e.printStackTrace();
                };

                return null;
            }

                //____________________CLIENT1_____________________________

                public void clientgetui() throws IOException {

                    DatagramSocket ds = new DatagramSocket();
                    byte b[] = new byte[]{0x7F, 0x03, 0x01, 0x00, 0x01, 0x15, 0x00, 0x00, 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00};


                    // byte[] ipA = new byte[]{(byte) 192, (byte) 168, 1, (byte) 100};
                    // IPAdress = String.valueOf(getIntent().getExtras().getByte("IP insert"));


                    // String ipA = IP;

                    InetAddress ia = InetAddress.getByName(IP);

                    DatagramPacket dp = new DatagramPacket(b, 28, ia, 21234);
                    ds.send(dp);

                    byte buffer[] = new byte[28];
                    DatagramPacket reply = new DatagramPacket(buffer, buffer.length);


                    ds.receive(reply);

                    ds.close();

                    byte[] dp23 = Arrays.copyOfRange(buffer, 8, 12);

                    int voltage = (dp23[0] * 256 + dp23[1]) & 0xFF; // PRINT VOLTAGE
                    int current = (dp23[2] * 256 + dp23[3]) & 0xFF; // PRINT CURRENT in TextView


                }



            }

        }

2 个答案:

答案 0 :(得分:0)

正在使用AsyncTask

所有UI的数据绑定都是在onPostExecute方法中完成的。

 @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            txtCurrent.setText(String.valueof(current));
            txtVoltage.setText(String.valueof(voltage));
        }

答案 1 :(得分:-1)

正如我看到你在AsynTask的后台调用clientgetui()方法所以有一些不同的方法来获取数据。

Way1:

创建全局变量(voltage, current),然后在从这些变量中获取值之前,应检查AsynctaskgetUI是否已完成。

Way2:

将这些变量保存在SharedPreferences中,在从共享偏好中获取数据之前,请确保已完成Your AsynctaskgetUI。

Way3:

创建全局静态变量并按照Way1。

从以上方面: 从Way1你可以从类中的变量中获取数据,而从其他两种方式你也可以从类外的变量中获取数据。