我需要在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
}
}
}
答案 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你可以从类中的变量中获取数据,而从其他两种方式你也可以从类外的变量中获取数据。