2017-04-21 8 views
1

Ich muss auf variable Spannung und Strom in meinem TextView in onCreate() Methode drucken. Strom- und Spannungsvariablen sind in der clientgetui() Methode.So drucken Sie eine Variable aus einer anderen Klasse

Hier ist mein Code:

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

Werfen Sie einen Blick hier http://stackoverflow.com/a/9963705/2890156 – Denny

+0

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

+0

Mögliche Duplikat von [Wie Holen Sie das Ergebnis von OnPostExecute() zu Hauptaktivität, weil AsyncTask eine separate Klasse ist?] (http://stackoverflow.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity -because-asynctask-is-a) – pringi

Antwort

0

Wie Sie verwenden AsyncTask

die alle UI-Daten in OnPostExecute Methode erfolgt Bindung.

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

Vielen Dank für Ihre Antwort, aber es liest Strom- und Spannungsvariablen am Anfang des Codes. es liest nicht von meiner Methode – TLDima

+0

Ah nein es funktioniert gut. Große Antwort Kumpel: D – TLDima

-1

Wie ich sehen werde, dass Sie clientgetui() Methode im Hintergrund eines AsynTask fordern so gibt es einige verschiedene Möglichkeiten, Daten zu erhalten.

Way1: 

globale Variablen (voltage, current) erstellen und dann, bevor Sie den Wert aus diesen Größen bekommen, sollten Sie überprüfen, ob Ihre AsynctaskgetUI oder nicht abgeschlossen ist.

Way2: 

Speichern Sie diese Variablen in SharedPreferences und bevor Daten von sharedpreferences immer stellen Sie sicher, dass Ihre AsynctaskgetUI abgeschlossen wurde.

Way3: 

Machen Sie globale statische Variablen und folgen Sie Way1.

von diesen oben genannten Möglichkeiten: von Way1 können Sie die Daten von Variablen mit in der Klasse erhalten, während von anderen zwei Möglichkeiten können Sie die Daten von Variablen außerhalb der Klasse auch erhalten.

+0

Danke für deine Antwort. Ich werde es versuchen – TLDima

+0

Willkommen, wenn Sie jedes Problem haben Kommentar wird spürbar sein. –

Verwandte Themen