2017-04-21 11 views
1

onCreate()の方法でTextViewの電圧と電流を可変にする必要があります。電流と電圧の変数はclientgetui()メソッドにあります。別のクラスから変数を印刷するには

は、ここに私のコードです:

私は、データを取得するための、いくつかの様々な方法があるので、あなたがAsynTaskの背景に 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

が重複する可能性を見てくださいAsyncTaskは別のクラスなので、OnPostExecute()の結果をメインアクティビティに取得しますか?](http://stackoverflow.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity -because-asynctask-is-a) – pringi

答えて

0

あなたはバインディングすべてのUIのデータはonPostExecute方式で行われAsyncTask

を使用していたよう。

@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

Way1: 

グローバル変数(voltage, current)を作成し、これらの変数から値を取得する前に、あなたのAsynctaskgetUIが完了したかではないされていることを確認する必要があります。 SharedPreferences中とsharedpreferencesからデータを取得する前に

Way2: 

保存これらの変数は、あなたのAsynctaskgetUIが完了していることを確認してください。

Way3: 

グローバルな静的変数を作成し、Way1に従います。

上記の方法から: Way1から、あなたはクラス内の変数からデータを得ることができる他の2つの方法からクラス内の変数からデータを得ることができます。

+0

お返事ありがとうございます。私はそれを試してみます – TLDima

+0

あなたが問題に直面したら歓迎コメントは相当になります。 –

関連する問題