2017-04-21 77 views
1

我需要在TextViewonCreate()方法中打印可变电压和电流。电流和电压变量在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 


       } 



      } 

     } 
+1

看一看这里http://stackoverflow.com/a/9963705/2890156 – Denny

+0

https://developer.android.com/reference/android/os/AsyncTask.html –

+0

的可能的复制[如何获取OnPostExecute()的主结果,因为AsyncTask是一个单独的类?](http://stackoverflow.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity -because-asynctask-is-a) – pringi

回答

0

当你正在使用的AsyncTask

所有UI的数据绑定在onPostExecute方法进行。

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

感谢您的回答,但它在代码的开头读取了电流和电压变量。它不会读取我的方法 – TLDima

+0

啊不,它的工作正常。好的答案队友:D – TLDima

-1

,因为我看到你在呼唤一个AsynTask的背景clientgetui()方法,所以有一些不同的方法来获取数据。

Way1: 

创建全局变量(voltage, current),然后根据这些变量所获得的价值之前,你应该检查你的AsynctaskgetUI已经完成与否。

Way2: 

SharedPreferences保存这些变量并获得从之前的数据sharedpreferences确保您AsynctaskgetUI已经完成。

Way3: 

建立全局静态变量并遵循Way1。

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

+0

谢谢你的回答。我会尝试 – TLDima

+0

如果你遇到任何问题,欢迎欢迎评论。 –