我有一个应用程序通过 AsyncPost 任务连接到 Java Servlet 后端
。该任务向客户端返回一个字符串,表示用 Gson
序列化的 json 对象。
它几乎可以正常工作,问题是我无法从实例化调用 ServletPostAsyncTask
的类访问 Servlet 响应消息:ListViewPrenota.class
。
项目结构如下:
我在 Servlet 和客户端中创建了两个类,Tour.class
和 Tours.class
来存储我的数据:
旅游类:
public class Tour {
// some simple int/string/list fields
}
游览类:
public class Tours {
private List<Tour> tours;
// ...
}
在客户端,在 ServletPostAsyncTask.class
中,我在 doInBackGround()
中收到上述 Gson 对象。在 onPostExecute()
中,我以这种方式反序列化它:
class ServletPostAsyncTask extends AsyncTask<Pair<Context, String>, Void, String> {
private Context context;
Tours tours;
@Override
protected String doInBackground(Pair<Context, String>... params) {
//connect to Servlet and get the serialized Gson object
}
@Override
protected void onPostExecute(String jsonResponse) {
tours = (new Gson().fromJson(jsonResponse, Tours.class));
}
}
现在,我从客户端的 ListViewPrenota.class
调用 ServletPostAsyncTask
:
ServletPostAsyncTask s = new ServletPostAsyncTask();
s.execute(new Pair<Context, String>(ListViewPrenota.this, "tours"));
Tours ttours = s.tours;
Tour tour = ttours.getTours().get(0);
问题:我收到一个 java.lang.NullPointerException
指向 Tour tour = ttours.getTours().get(0);
阻止我从 ServletPostAsyncTask
以外的其他类访问新接收的 Tours 对象的原因是什么?
非常感谢
最佳答案
问题是你认为代码是串行运行的,如果你想使用从 AsycTask
返回的东西,你需要在 onPostExecute
中使用它或者有一个回调完成后发送数据
doInBackground(){
//do heavy work
}
onPostExecute(Data data){
//handle data
//send data via interface to activity or class that needs the data
//or just put everything that needs the data in here
}
关于java - Android - 从同类访问 Servlet AsyncPost 任务响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29237838/