Android получить данные в классе с расширенной асинхронной задачей - PullRequest
0 голосов
/ 03 мая 2018

Привет, я использую Android Studio. Я пытаюсь извлечь json из класса с помощью asynctask, но я могу получить данные, полученные в главном потоке, если, если создать метод получения, чтобы получить переменную данных, это ноль, и я получаю ошибку во время выполнения, могу пожалуйста, помогите мне?

это код:

(mainactivity)

Tarea tarea= new Tarea(URL_DATA,Request.toString(),this);
tarea.execute();
texto.setText((CharSequence) tarea.getData());

(класс)

public class Tarea extends AsyncTask {
    ProgressDialog progressDialog;
    String MyURL,MJson;
    volatile String data="";


    public String getData() {
        return data;
    }

    public Tarea(String myURL, String mJson, Context contexto) {
        this.contexto = contexto;
        this.MJson=mJson;
        this.MyURL=myURL;

    }

    Context contexto;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog=new ProgressDialog(contexto);
        progressDialog.setMessage("Buscando Paqueterias, por favor espera un momento...");
        progressDialog.show();
    }

    @Override
    protected Object doInBackground(Object[] objects) {

        if(MyURL!=null&&MJson!=null) {
            try {
                URL url = new URL(MyURL.toString());
                HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
                conn.setRequestProperty("Accept", "application/json");
                conn.setDoOutput(true);
                conn.setDoInput(true);
                JSONObject MyJson = new JSONObject(MJson);
                DataOutputStream os = new DataOutputStream(conn.getOutputStream());
                os.writeBytes(MyJson.toString());
                os.flush();
                os.close();
                //Log.i("Status",String.valueOf(conn.getResponseCode()));
                //Log.i("MSG", conn.getResponseMessage());
                InputStream in = conn.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(in);
                int inputStreamData = inputStreamReader.read();
                while (inputStreamData != -1) {
                    char current = (char) inputStreamData;
                    inputStreamData = inputStreamReader.read();
                    data += current;

                }

            } catch (Exception e) {
                e.printStackTrace();
            }
            progressDialog.dismiss();
        }else {
            Log.i("Error...","Alguna de las variables MyURL o MJson esta vacia...");
        }
        return data;
    }

    @Override
    protected void onPostExecute(Object o) {
        super.onPostExecute(o);

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Log.i("REs",data);


    }
}

Я могу распечатать журнал, но не могу отправить его в mainactivity для манипуляции JSON

1 Ответ

0 голосов
/ 03 мая 2018

Вы можете сделать это с помощью метода обратного вызова.

Steps

 1. Create an interface
 2. Create an inner class on activity implement that interface.
 3. Pass the instance of inner class to "Tarea" constructor.
 4. Use constructor variable to communicate with activity.

Вы также можете сделать это с другим подходом, переопределив onPostExecute.

Используйте ниже код ..

Tarea tarea= new Tarea(URL_DATA,Request.toString(),this) {
    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...