2017-04-21 81 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

如果你遇到任何問題,歡迎歡迎評論。 –