簡體   English   中英

如何將數組列表中的值從AsyncTask類發送到Android中的另一個類?

[英]How to send values from an arraylist from AsyncTask class to another class in Android?

我有下一個問題,我試圖將Arraylist<string>值從AsyncTask類發送到其他類調用圖形,但是我不知道我做錯了什么以及如何在另一個類中獲取Arraylist<string>值,因為我有我的代碼有很多sintaxis錯誤

AsyncTask類

public class fetch  extends AsyncTask<Void,Void,ArrayList<String>> {
    //v funcional


        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @Override
        protected ArrayList<String> doInBackground(Void... voids) {

                    String Id ="";
                    String Time ="";
                    String Pressure="";

                    ArrayList<String> IdArray = new ArrayList<String>();
                    ArrayList<String> TimeArray = new ArrayList<String>();
                    ArrayList<String> PressureArray = new ArrayList<String>();
                    String IdS=""+IdArray;
                    String TimeS=""+TimeArray;
                    String PresureS=""+PressureArray;
                    data.set(1,TimeS);
                    data.set(2,TimeS);
                    data.set(3,TimeS);

            return data;
        }

        @Override
        protected void onPostExecute(ArrayList<String> result){
            super.onPostExecute(result);
            Graphics.data.setText(data);

        }}

圖形類

 public class Graphics extends AppCompatActivity {
        public static TextView data;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.graphics);

            Button firstButton = (Button) findViewById(R.id.json);
            data = (TextView) findViewById(R.id.msgTxt);
            firstButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    fetch process = new fetch();
                   ArrayList<String> data= process.execute();
                   data.get(1);
                }
            });
    }

您可以創建一個接口,您的“圖形”將實現該接口,並將其傳遞給您的AsyncTask類。 像這樣

public interface BlaBlaBla {
    void doBla(ArrayList<String> myBla);
}

並在您的“圖形”中:

class Graphics extends AppCompatActivity implements BlaBlaBla {
fetch process = new fetch(this);
}

和asyncClass:

public class fetch  extends AsyncTask<Void,Void,ArrayList<String>> {
 //constructor
BlaBlaBla bla;
public fetch(BlaBlaBla bla){
this.bla=bla;
}
//when your task is complete use bla.doBla(pass your array here);
}

我的解決方案獲取類

public class Fetch  extends AsyncTask<Void,Void,String[][]> {
    public static int KEY = 0;
    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @Override
     protected String[][] doInBackground(Void... voids) {
          HttpHandler sh = new HttpHandler();
           String url = "http:xxxxxxx/xxx.json";
           String jsonStr = sh.makeServiceCall(url);
           JSONObject jsonObj = null;
            try {
                jsonObj = new JSONObject(jsonStr);
                int nTiempos=jsonObj.length();
                String[] IdKeyArray = new String[nTie];
        for (int i = 0; i < jsonObj.length(); i++) {
                  JSONObject c = jsonObj.getJSONObject(String.valueOf(i));
                  IdKeyArray[i] = c.getString("Key");
                  String[][] valores={IdKeyArray};
                return valores;
            } catch (JSONException e) {
            e.printStackTrace();
        }
       return null;
   }
}

這是我獲取值的另一個類的“調用”

private String[][] valores;
Fetch process = new Fetch();
  process.execute();
   try {
      valores=process.get();
     } catch (ExecutionException e) {
        e.printStackTrace();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      pm.setText(String.valueOf(valores[Fetch.Key][0]));
   }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM