Java AsyncTask返回对象到Android Studio
我正在尝试使用Java AsyncTask返回对象到Android Studio,java,android,android-asynctask,Java,Android,Android Asynctask,我正在尝试使用AsyncTask进行API调用,并将响应映射到我命名为MapInfo的对象,该对象是MainActivity中的一个变量。然后,我使用这个名为polyline的MapInfo字段,并使用预构建的URL编码器在不同的API调用中使用。我遇到的问题是,我让AsyncTask在PostExecute()中返回MapInfo对象,但是MainActivity上的代码继续执行,我需要在继续执行代码之前先返回MapInfo对象 这在main活动中: public static MapInfo
AsyncTask
进行API调用,并将响应映射到我命名为MapInfo
的对象,该对象是MainActivity
中的一个变量。然后,我使用这个名为polyline的MapInfo
字段,并使用预构建的URL编码器在不同的API调用中使用。我遇到的问题是,我让AsyncTask
在PostExecute()
中返回MapInfo
对象,但是MainActivity
上的代码继续执行,我需要在继续执行代码之前先返回MapInfo
对象
这在main活动中:
public static MapInfo mapInfo = new MapInfo();
OnCreate() {
button.setonClick() {
//some stuff
new AsyncTask blah = blahblah.execute("");
//the above returns a singular MapInfo object and assigns it to mapInfo
String polyline = mapInfo.polyline; //<--This is where the issue is.
}
}
publicstaticmapinfo-MapInfo=newmapinfo();
OnCreate(){
button.setonClick(){
//一些东西
新建AsyncTask blah=blahblah.execute(“”);
//上面返回一个单一的MapInfo对象并将其指定给MapInfo
String polyline=mapInfo.polyline;//AsyncTask
将在后台线程中执行异步执行的任务。将String polyline=mapInfo.polyline;
放在新异步任务blah=blahblah.execute(“”)之后;
将立即执行它,因为控件将触发异步任务
并继续执行下一个语句
如果在执行任务后需要执行String polyline=mapInfo.polyline;
,请将其放置在onPostExecute()
中,如下所示:
@Override
protected void onPostExecute(final MapInfo mapInfo) {
super.onPostExecute(mapInfo);
...
final String polyline = mapInfo.polyline;
}
AsyncTask
将在后台线程中执行异步执行的任务。将字符串polyline=mapInfo.polyline;
紧跟在new AsyncTask blah=blahblah.execute(“”)之后;
将立即执行它,因为控件将触发异步任务
并继续执行下一个语句
如果在执行任务后需要执行String polyline=mapInfo.polyline;
,请将其放置在onPostExecute()
中,如下所示:
@Override
protected void onPostExecute(final MapInfo mapInfo) {
super.onPostExecute(mapInfo);
...
final String polyline = mapInfo.polyline;
}
您不应该对API调用使用AsyncTask
,因为API服务(改装、截击等)已经在后台线程中工作
由于AsyncTask
和API调用服务在不同的线程中工作,因此数据不会相应地更新
相反,您应该使用API的方法onSuccess
在main活动中设置结果您不应该使用AsyncTask
进行API调用,因为API服务(改装、截击等)已经在后台线程中工作
由于AsyncTask
和API调用服务在不同的线程中工作,因此数据不会相应地更新
相反,您应该使用API的方法onSuccess
来设置MainActivity
AsyncTask
在异步执行的后台线程中执行任务。
执行任务后获得结果的两种方法:
使用blahblah.execute(“”;
并在onPostExecute中获取结果
@Override
protected void onPostExecute(MapInfo mapInfo) {
super.onPostExecute(mapInfo);
String polyline = mapInfo.polyline;
}
或
像
MapInfo mapInfo = blahblah.execute("").get();
String polyline = mapInfo.polyline;
这样,就不需要捕捉onPostExecute(-)中的结果
AsyncTask
在后台线程中执行异步执行的任务。
执行任务后获得结果的两种方法:
使用blahblah.execute(“”;
并在onPostExecute中获取结果
@Override
protected void onPostExecute(MapInfo mapInfo) {
super.onPostExecute(mapInfo);
String polyline = mapInfo.polyline;
}
或
像
MapInfo mapInfo = blahblah.execute("").get();
String polyline = mapInfo.polyline;
这样,就不需要捕捉onPostExecute(-)中的结果
异步任务将在单独的线程中处理,主线程继续到下一行。
MapInfo对象尚未与API数据一起存储,因此其多段线为空
像这样试试
单击按钮后,启动AsyncTask以加载MapInfo。在onPostExecute()中,执行分配给文本视图和下载图像等剩余工作
new AsyncTask<String, Void, MapInfo>() {
@Override
protected MapInfo doInBackground(String... strings) {
MapInfo m = null;
try {
//handling of Mapinfo api
} catch (Exception e) {
e.printStackTrace();
}
return m;
}
@Override
protected void onPostExecute(MapInfo info) {
mapInfo = info;
if (mapInfo != null) {
//assign to textviews
//download image task (background thread)
}
}
}.execute();
newasynctask(){
@凌驾
受保护的MapInfo doInBackground(字符串…字符串){
mapinfom=null;
试一试{
//Mapinfo api的处理
}捕获(例外e){
e、 printStackTrace();
}
返回m;
}
@凌驾
受保护的void onPostExecute(MapInfo信息){
mapInfo=info;
如果(mapInfo!=null){
//分配给文本视图
//下载图像任务(后台线程)
}
}
}.execute();
异步任务将在单独的线程中处理,主线程继续到下一行。
MapInfo对象尚未与API数据一起存储,因此其多段线为空
像这样试试
单击按钮后,启动AsyncTask以加载MapInfo。在onPostExecute()中,执行分配给文本视图和下载图像等剩余工作
new AsyncTask<String, Void, MapInfo>() {
@Override
protected MapInfo doInBackground(String... strings) {
MapInfo m = null;
try {
//handling of Mapinfo api
} catch (Exception e) {
e.printStackTrace();
}
return m;
}
@Override
protected void onPostExecute(MapInfo info) {
mapInfo = info;
if (mapInfo != null) {
//assign to textviews
//download image task (background thread)
}
}
}.execute();
newasynctask(){
@凌驾
受保护的MapInfo doInBackground(字符串…字符串){
mapinfom=null;
试一试{
//Mapinfo api的处理
}捕获(例外e){
e、 printStackTrace();
}
返回m;
}
@凌驾
受保护的void onPostExecute(MapInfo信息){
mapInfo=info;
如果(mapInfo!=null){
//分配给文本视图
//下载图像任务(后台线程)
}
}
}.execute();
这个问题是网络连接。它抛出了一个错误B/C,它不能在主线程上运行。我试着用一个叫做run的方法使AssicTebug成为一个类,但是它抛出了这个错误。我可以走这条路线,但是它将是解决问题的一个创可贴,而不是一个解决方案。这个问题是网络连接。HORE错误B/C它不能在主线程上运行。我试着用一个叫做run的方法来做AssiCtaskA类,但是它抛出了这个错误。我可以走这条路线,但是它会是一个更多的带帮助T。