Java 片段v4中的AsyncTask没有在2.2上调用onPostExecute,而是在2.3上调用最新版本的android
我对Fragment有一个问题,它没有在2.2上调用onPostExecute,而是在2.3上调用最新版本的android 我几天来试图找到解决办法,但没有找到 我的代码就是这个片段Java 片段v4中的AsyncTask没有在2.2上调用onPostExecute,而是在2.3上调用最新版本的android,java,android,android-fragments,android-fragmentactivity,Java,Android,Android Fragments,Android Fragmentactivity,我对Fragment有一个问题,它没有在2.2上调用onPostExecute,而是在2.3上调用最新版本的android 我几天来试图找到解决办法,但没有找到 我的代码就是这个片段 public class MovieFragment extends SherlockFragment implements IHomeScreen, OnItemClickListener, IActivity { private FrameLayout loading = null
public class MovieFragment extends SherlockFragment implements IHomeScreen, OnItemClickListener, IActivity {
private FrameLayout loading = null;
private ListView listView = null;
private ListMovieAdapter listMovieAdapter = null;
private boolean isFavorite = false;
private boolean isSearch = false;
private String strSearch = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
return inflater.inflate(R.layout.fragment_movie, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
init(view);
initObjectListener();
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
if (strSearch == null) {
loadingDataFromLocal();
}
else {
loadingDataFromServer(strSearch);
}
super.onActivityCreated(savedInstanceState);
}
@Override
public void init() {
}
@Override
public void initFormValidation() {
}
@Override
public void init(View v) {
listView = (ListView) v.findViewById(R.id.listView);
loading = (FrameLayout) v.findViewById(R.id.loading);
loading.setVisibility(View.GONE);
}
@Override
public void initObjectListener() {
listView.setOnItemClickListener(this);
}
@Override
public void loadingDataFromServer() {
}
public void loadingDataFromServer(String strSearch) {
if (Utils.isOnline(getActivity())) {
new LoadingDataFromServer().execute(strSearch);
}
}
public void refreshList(List<EntryVO> entryVOs) {
listMovieAdapter = new ListMovieAdapter(getSherlockActivity(), entryVOs, isFavorite);
listView.setAdapter(listMovieAdapter);
}
@Override
public void loadingDataFromLocal() {
Utils.log(new Exception(), "[isFavorite]" + isFavorite);
if (isFavorite) {
refreshList(DataSourceDAO.getFavorite(getSherlockActivity()));
return;
}
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
if (Utils.isOnline(getActivity())) {
String youtubeID = listMovieAdapter.getItem(position).getYoutubeID();
Utils.log(new Exception(), "[position]" + position + "[youtubeID]" + youtubeID);
new YoutubePlayer(getSherlockActivity(), youtubeID);
}
else {
Toast.makeText(getActivity(), R.string.no_internet_connection, Toast.LENGTH_LONG).show();
}
}
class LoadingDataFromServer extends AsyncTask<String, Void, List<EntryVO>> {
@Override
protected void onPreExecute() {
super.onPreExecute();
Utils.log(new Exception(), "[onPreExecute]");
if (isSearch) {
Utils.showProgressDialog(R.string.searching, getSherlockActivity());
}
}
@Override
protected void onPostExecute(List<EntryVO> result) {
super.onPostExecute(result);
Utils.log(new Exception(), "[onPostExecute]");
Utils.dismissProgressDialog();
refreshList(result);
}
@Override
protected List<EntryVO> doInBackground(String... params) {
Utils.log(new Exception(), "[doInBackground]");
String search = params[0];
List<EntryVO> entryVOs = new SearchYoutubeAPI().searchYoutube(search);
Utils.log(new Exception(), "[entryVOs]" + entryVOs.size());
return entryVOs;
}
}
公共类MovieFragment扩展SherlockFragment实现IHomeScreen、OnItemClickListener、IActivity{
私有FrameLayout加载=null;
私有ListView ListView=null;
私有ListMovieAdapter ListMovieAdapter=null;
私有布尔值isFavorite=false;
私有布尔值isSearch=false;
私有字符串strSearch=null;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
super.onCreateView(充气机、容器、保存状态);
返回充气机。充气(R.layout.fragment_电影,容器,假);
}
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
初始(视图);
initObjectListener();
super.onViewCreated(视图,savedInstanceState);
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
if(strSearch==null){
从本地()加载数据;
}
否则{
从服务器加载数据(strSearch);
}
super.onActivityCreated(savedInstanceState);
}
@凌驾
公共void init(){
}
@凌驾
public void initFormValidation(){
}
@凌驾
公共void init(视图v){
listView=(listView)v.findViewById(R.id.listView);
加载=(框架布局)v.findviewbyd(R.id.loading);
loading.setVisibility(View.GONE);
}
@凌驾
public void initObjectListener(){
setOnItemClickListener(this);
}
@凌驾
public void loadingDataFromServer(){
}
public void loadingDataFromServer(字符串strearch){
if(Utils.isOnline(getActivity())){
新建LoadingDataFromServer().execute(strSearch);
}
}
公共无效刷新列表(列表入口VOS){
listMovieAdapter=新的listMovieAdapter(getSherlockActivity(),entryVOs,isFavorite);
setAdapter(listMovieAdapter);
}
@凌驾
public void loadingDataFromLocal(){
日志(新的异常(),“[isFavorite]”+isFavorite);
如果(我最喜欢){
刷新列表(DataSourceDAO.getFavorite(getSherlockActivity());
返回;
}
}
@凌驾
public void onItemClick(适配器视图arg0、视图arg1、内部位置、长arg3){
if(Utils.isOnline(getActivity())){
字符串youtubeID=listMovieAdapter.getItem(位置).getYoutubeID();
日志(新异常(),“[position]”+position+“[youtubeID]”+youtubeID);
新的YouTubeplyer(getSherlockActivity(),youtubeID);
}
否则{
Toast.makeText(getActivity(),R.string.no_internet_connection,Toast.LENGTH_LONG).show();
}
}
类LoadingDataFromServer扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
log(新异常(),“[onPreExecute]”;
如果(i搜索){
Utils.showProgressDialog(R.string.search,getSherlockActivity());
}
}
@凌驾
受保护的void onPostExecute(列表结果){
super.onPostExecute(结果);
日志(新异常(),“[onPostExecute]”;
Utils.dismissProgressDialog();
刷新列表(结果);
}
@凌驾
受保护列表doInBackground(字符串…参数){
log(新异常(),“[doInBackground]”);
字符串搜索=参数[0];
List entryVOs=new SearchYoutubeAPI().searchYoutube(搜索);
Utils.log(新异常(),“[entryVOs]”+entryVOs.size());
返回入口;
}
}
}
但如果我测试它,请复制
class LoadingDataFromServer extends AsyncTask<String, Void, List<EntryVO>> {
@Override
protected void onPreExecute() {
super.onPreExecute();
Utils.log(new Exception(), "[onPreExecute]");
if (isSearch) {
Utils.showProgressDialog(R.string.searching, getSherlockActivity());
}
}
@Override
protected void onPostExecute(List<EntryVO> result) {
super.onPostExecute(result);
Utils.log(new Exception(), "[onPostExecute]");
Utils.dismissProgressDialog();
refreshList(result);
}
@Override
protected List<EntryVO> doInBackground(String... params) {
Utils.log(new Exception(), "[doInBackground]");
String search = params[0];
List<EntryVO> entryVOs = new SearchYoutubeAPI().searchYoutube(search);
Utils.log(new Exception(), "[entryVOs]" + entryVOs.size());
return entryVOs;
}
}
class LoadingDataFromServer扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
log(新异常(),“[onPreExecute]”;
如果(i搜索){
Utils.showProgressDialog(R.string.search,getSherlockActivity());
}
}
@凌驾
受保护的void onPostExecute(列表结果){
super.onPostExecute(结果);
日志(新异常(),“[onPostExecute]”;
Utils.dismissProgressDialog();
刷新列表(结果);
}
@凌驾
受保护列表doInBackground(字符串…参数){
log(新异常(),“[doInBackground]”);
字符串搜索=参数[0];
List entryVOs=new SearchYoutubeAPI().searchYoutube(搜索);
Utils.log(新异常(),“[entryVOs]”+entryVOs.size());
返回入口;
}
}
要在活动中运行,它也可以与2.2配合使用
你能告诉我我的密码有什么问题吗
非常感谢,没有检查您的代码,但是有了这些问题,这通常是因为您需要在UI线程上创建和执行异步任务。我更改了如下方法:public void loadingDataFromServer(final String strearch){if(Utils.isOnline(getActivity()){getsherlockavity().runOnUiThread(new Runnable(){public void run(){new LoadingDataFromServer().execute(strearch);}}}}}}但它仍然是一样的….:(