Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 片段v4中的AsyncTask没有在2.2上调用onPostExecute,而是在2.3上调用最新版本的android_Java_Android_Android Fragments_Android Fragmentactivity - Fatal编程技术网

Java 片段v4中的AsyncTask没有在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

我对Fragment有一个问题,它没有在2.2上调用onPostExecute,而是在2.3上调用最新版本的android

我几天来试图找到解决办法,但没有找到

我的代码就是这个片段

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);}}}}}}但它仍然是一样的….:(