android使用asynctask extended在类中检索数据
hello im使用Android Studio im尝试使用asynctask从类中检索json,但是如果创建getter to Acquitain数据变量,则我可以将获取的数据检索到主线程,该变量为null,并且我在运行时遇到错误,您能帮我吗 代码如下: (主要活动) (班级)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
我可以打印日志,但我不能将其发送到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);
}
};