return json 到 activity 通过 asynctask
return json to activity by asynctask
我正在使用 doInBackground 方法从 Web 服务中获取 json,这样我就可以在我的主程序中使用它 activity 这是我所做的,但它不起作用
public class JSONTransmitter extends AsyncTask<JSONObject, JSONObject, JSONObject> {
@Override
protected JSONObject doInBackground(JSONObject... data) {
//.....
return json;
}
@Override
protected void onPostExecute(JSONObject jsonObject) {
super.onPostExecute(jsonObject);
}
}
这是我的主要内容 activity
public void sync(View v){
LocationsDB mLocationsDB = new LocationsDB(SupportMapActivity.this);
Cursor events= mLocationsDB.getAllLocations();
try {
JSONObject json=makJsonObject(events);
JSONTransmitter transmitter = new JSONTransmitter();
AsyncTask<JSONObject, JSONObject, JSONObject> jsonRetour = transmitter.execute(new JSONObject[]{json});
//I want to use it here like jsonRetour.getString("something");
} catch (JSONException e) {
e.printStackTrace();
}
}
在JSON发送器中,您需要在onPostExecute() 中对JSON 对象做一些事情。目前,您的 Async 任务对它没有任何作用。
试试这个:
在 Main activity 中,有一个名为 mJson 的 JSONObject var 并在你的 onPostExecute 中这样做:
protected void onPostExecute(JSONObject jsonObject) {
super.onPostExecute(jsonObject);
mJson = jsonObject;
// call a method from the MainActivity to do whatever needs to be done with the JSON
}
当然要让它工作,AsyncTask 必须是 Main Activity 上的内部 class。
有多种方法可以做到这一点,但我最喜欢的方法之一是使用回调接口。
这是 JSONTransmitter:
public class JSONTransmitter extends AsyncTask<JSONObject, JSONObject, JSONObject> {
private OnJsonTransmitionCompleted mCallback;
public JSONTransmitter(OnJsonTransmitionCompleted callback) {
this.mCallback = callback;
}
@Override
protected JSONObject doInBackground(JSONObject... data) {
//.....
return json;
}
@Override
protected void onPostExecute(JSONObject jsonObject) {
super.onPostExecute(jsonObject);
this.mCallback.onTransmitionCompleted(jsonObject);
}
public interface OnJsonTransmitionCompleted {
void onTransmitionCompleted(JSONObject jsonObject);
}
}
回调接口 OnJsonTransmitionCompleted
位于 JSONTrasnmitter
内部,因为它仅用于 JSONTransmitter
.
这里是主要的activity:
public class SupportMapActivity extends Activity implements JSONTransmitter.OnJsonTransmitionCompleted{
public void sync(View v){
LocationsDB mLocationsDB = new LocationsDB(SupportMapActivity.this);
Cursor events= mLocationsDB.getAllLocations();
try {
JSONObject json = makJsonObject(events);
JSONTransmitter transmitter = new JSONTransmitter(this);
transmitter.execute(new JSONObject[]{json});
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onTransmitionCompleted(JSONObject jsonObject) {
// Now you have access to your JSON data in your activity!
}
}
所以我们在 JSONTransmitter
中创建了一个回调接口,它有一个方法 void onTransmitionCompleted(JSONObject jsonObject)
可以将 JSONObject
从 onPostExecute(JSONObject jsonObject)
传递给您的 activity。
在主 activity 中,我们实现 JSONTransmitter.OnJsonTransmitionCompleted
并在实例化 JSONTransmitter
时传入 this
,最后我们在 [=53] 中覆盖 void onTransmitionCompleted(JSONObject jsonObject)
=] 一旦我们的 AsyncTask
完成其后台进程并且 onPostExecute(JSONObject jsonObject)
被调用,我们将在实现的方法 onTransmitionCompleted(JSONObject jsonObject)
.
中收到 JSONObject
我希望这对您有所帮助,这里有一些关于此主题的链接:
android asynctask sending callbacks to ui
http://android-er.blogspot.co.il/2013/09/implement-callback-function-with.html
http://blog.redkitmedia.com/android-asynctask-sending-callbacks-to-ui/
http://android-dwivediji.blogspot.co.il/2014/01/best-way-to-use-asynctask-class.html
我正在使用 doInBackground 方法从 Web 服务中获取 json,这样我就可以在我的主程序中使用它 activity 这是我所做的,但它不起作用
public class JSONTransmitter extends AsyncTask<JSONObject, JSONObject, JSONObject> {
@Override
protected JSONObject doInBackground(JSONObject... data) {
//.....
return json;
}
@Override
protected void onPostExecute(JSONObject jsonObject) {
super.onPostExecute(jsonObject);
}
}
这是我的主要内容 activity
public void sync(View v){
LocationsDB mLocationsDB = new LocationsDB(SupportMapActivity.this);
Cursor events= mLocationsDB.getAllLocations();
try {
JSONObject json=makJsonObject(events);
JSONTransmitter transmitter = new JSONTransmitter();
AsyncTask<JSONObject, JSONObject, JSONObject> jsonRetour = transmitter.execute(new JSONObject[]{json});
//I want to use it here like jsonRetour.getString("something");
} catch (JSONException e) {
e.printStackTrace();
}
}
在JSON发送器中,您需要在onPostExecute() 中对JSON 对象做一些事情。目前,您的 Async 任务对它没有任何作用。
试试这个:
在 Main activity 中,有一个名为 mJson 的 JSONObject var 并在你的 onPostExecute 中这样做:
protected void onPostExecute(JSONObject jsonObject) {
super.onPostExecute(jsonObject);
mJson = jsonObject;
// call a method from the MainActivity to do whatever needs to be done with the JSON
}
当然要让它工作,AsyncTask 必须是 Main Activity 上的内部 class。
有多种方法可以做到这一点,但我最喜欢的方法之一是使用回调接口。
这是 JSONTransmitter:
public class JSONTransmitter extends AsyncTask<JSONObject, JSONObject, JSONObject> {
private OnJsonTransmitionCompleted mCallback;
public JSONTransmitter(OnJsonTransmitionCompleted callback) {
this.mCallback = callback;
}
@Override
protected JSONObject doInBackground(JSONObject... data) {
//.....
return json;
}
@Override
protected void onPostExecute(JSONObject jsonObject) {
super.onPostExecute(jsonObject);
this.mCallback.onTransmitionCompleted(jsonObject);
}
public interface OnJsonTransmitionCompleted {
void onTransmitionCompleted(JSONObject jsonObject);
}
}
回调接口 OnJsonTransmitionCompleted
位于 JSONTrasnmitter
内部,因为它仅用于 JSONTransmitter
.
这里是主要的activity:
public class SupportMapActivity extends Activity implements JSONTransmitter.OnJsonTransmitionCompleted{
public void sync(View v){
LocationsDB mLocationsDB = new LocationsDB(SupportMapActivity.this);
Cursor events= mLocationsDB.getAllLocations();
try {
JSONObject json = makJsonObject(events);
JSONTransmitter transmitter = new JSONTransmitter(this);
transmitter.execute(new JSONObject[]{json});
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onTransmitionCompleted(JSONObject jsonObject) {
// Now you have access to your JSON data in your activity!
}
}
所以我们在 JSONTransmitter
中创建了一个回调接口,它有一个方法 void onTransmitionCompleted(JSONObject jsonObject)
可以将 JSONObject
从 onPostExecute(JSONObject jsonObject)
传递给您的 activity。
在主 activity 中,我们实现 JSONTransmitter.OnJsonTransmitionCompleted
并在实例化 JSONTransmitter
时传入 this
,最后我们在 [=53] 中覆盖 void onTransmitionCompleted(JSONObject jsonObject)
=] 一旦我们的 AsyncTask
完成其后台进程并且 onPostExecute(JSONObject jsonObject)
被调用,我们将在实现的方法 onTransmitionCompleted(JSONObject jsonObject)
.
JSONObject
我希望这对您有所帮助,这里有一些关于此主题的链接:
android asynctask sending callbacks to ui
http://android-er.blogspot.co.il/2013/09/implement-callback-function-with.html
http://blog.redkitmedia.com/android-asynctask-sending-callbacks-to-ui/
http://android-dwivediji.blogspot.co.il/2014/01/best-way-to-use-asynctask-class.html