Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android使用asynctask extended在类中检索数据_Android_Android Asynctask - Fatal编程技术网

android使用asynctask extended在类中检索数据

android使用asynctask extended在类中检索数据,android,android-asynctask,Android,Android Asynctask,hello im使用Android Studio im尝试使用asynctask从类中检索json,但是如果创建getter to Acquitain数据变量,则我可以将获取的数据检索到主线程,该变量为null,并且我在运行时遇到错误,您能帮我吗 代码如下: (主要活动) (班级) 我可以打印日志,但我不能将其发送到mainactivity来操作json。您可以借助回调方法来完成此操作 台阶 您还可以通过覆盖onPostExecute来使用不同的方法执行此操作 使用下面的代码 Tarea tar

hello im使用Android Studio im尝试使用asynctask从类中检索json,但是如果创建getter to Acquitain数据变量,则我可以将获取的数据检索到主线程,该变量为null,并且我在运行时遇到错误,您能帮我吗

代码如下:

(主要活动)

(班级)


我可以打印日志,但我不能将其发送到mainactivity来操作json。您可以借助回调方法来完成此操作

台阶

您还可以通过覆盖
onPostExecute
来使用不同的方法执行此操作

使用下面的代码

Tarea tarea= new Tarea(URL_DATA,Request.toString(),this) {
    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
    }
};

使用回调接口。看见
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);


    }
}
 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.
Tarea tarea= new Tarea(URL_DATA,Request.toString(),this) {
    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
    }
};