Android 在fragement中实现一个任务

Android 在fragement中实现一个任务,android,android-fragments,android-asynctask,Android,Android Fragments,Android Asynctask,我对安卓及其编程一无所知。我想在android内部实现AsyncTask,我想在这里完成我的toast工作。(出于测试目的)请帮助我找到下面我使用的代码。尝试此操作时,我发现以下错误 日志目录 03-15 19:52:25.666: E/AndroidRuntime(18845): FATAL EXCEPTION: AsyncTask #1 03-15 19:52:25.666: E/AndroidRuntime(18845): java.lang.RuntimeException:

我对安卓及其编程一无所知。我想在android内部实现AsyncTask,我想在这里完成我的toast工作。(出于测试目的)请帮助我找到下面我使用的代码。尝试此操作时,我发现以下错误

日志目录

 03-15 19:52:25.666: E/AndroidRuntime(18845): FATAL EXCEPTION: AsyncTask #1
    03-15 19:52:25.666: E/AndroidRuntime(18845): java.lang.RuntimeException: An error occured while executing doInBackground()
    03-15 19:52:25.666: E/AndroidRuntime(18845):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
    03-15 19:52:25.666: E/AndroidRuntime(18845):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
    03-15 19:52:25.666: E/AndroidRuntime(18845):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
我的代码

public class Login extends Fragment   {
        View view;
        ImageView button,pic;

        @SuppressLint("ValidFragment")
        public Login() {

        }
         @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            view= inflater.inflate(R.layout.login, container, false);
                    return view;
        }

        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onActivityCreated(savedInstanceState);
            button=(ImageView) view.findViewById(R.id.login);
            pic=(ImageView) view.findViewById(R.id.pic);
            button.setOnClickListener(btnClick);

        }

        ImageView.OnClickListener btnClick=new ImageView.OnClickListener()
        {

            @SuppressWarnings("deprecation")
            @Override
            public void onClick(View v) {

                // my code begins here  
                if(fb.isSessionValid())
                {
                new MyAsyncTask().execute("");  

                }
                else
                {

                }
                        }

        };

        class MyAsyncTask extends AsyncTask<String, String, String>
        {

            @Override
            protected String doInBackground(String... params) {

                    Toast.makeText(getActivity(),"session valid" , Toast.LENGTH_LONG).show(); 

                return null;
            }

        }

    }
公共类登录扩展片段{
视图;
图片查看按钮;
@SuppressLint(“有效碎片”)
公共登录(){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.login,container,false);
返回视图;
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onActivityCreated(savedInstanceState);
button=(ImageView)view.findViewById(R.id.login);
pic=(ImageView)view.findviewbyd(R.id.pic);
按钮。setOnClickListener(btnClick);
}
ImageView.OnClickListener btnClick=新建ImageView.OnClickListener()
{
@抑制警告(“弃用”)
@凌驾
公共void onClick(视图v){
//我的代码从这里开始
if(fb.isSessionValid())
{
新建MyAsyncTask().execute(“”);
}
其他的
{
}
}
};
类MyAsyncTask扩展了AsyncTask
{
@凌驾
受保护的字符串doInBackground(字符串…参数){
Toast.makeText(getActivity(),“session valid”,Toast.LENGTH_LONG.show();
返回null;
}
}
}

你不能在后台敬酒。将Toast移动到
onPostExecute()
或在UI线程上运行Toast,如下所示:(第三个答案)


Toast在UI线程中执行,而doInBackGround()方法在后台线程中运行。这就是错误的原因。将Toast移动到onPostExecute()方法。onPostExecute()方法接受doInBackGround()方法的结果,因此对您来说,它看起来像:

@Override
public void onPostExecute(String result) {
    // make Toast
}

请记住,必须强制重写doInBackGround方法。所以你仍然需要它。

为什么我不能在后台运行它?一个祝酒词显示在UI上,而不是后台