首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从FragmentActivity启动AsynTask

从FragmentActivity启动AsynTask
EN

Stack Overflow用户
提问于 2016-02-23 10:54:01
回答 1查看 221关注 0票数 0

这是扩展FragmentActivity的类文件。我不太确定我是否做得对。我想有一个选项卡式布局在这个活动,但应用程序不断崩溃。

代码语言:javascript
复制
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_booking);

        viewPager = (ViewPager)findViewById(R.id.viewPager);
        viewPager.setAdapter(new CustomAdapter(getSupportFragmentManager(), getApplicationContext()));

        tabLayout = (TabLayout) findViewById(R.id.tabLayout);
        tabLayout.setupWithViewPager(viewPager);

        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){

            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }
        });

    }

    private class CustomAdapter extends FragmentPagerAdapter {

        private String fragments [] = {"A","B"};

        public CustomAdapter(FragmentManager supportFragmentManager, Context applicationContext) {
            super(supportFragmentManager);

        }

        @Override
        public Fragment getItem(int position) {

            switch (position){
                case 0: return new fragment1();
                case 1: return new fragment2();
                default:return null;
            }


        }

        @Override
        public int getCount() {
            return fragments.length;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return fragments[position];
        }
    }


When I pass an intent from the AsynTask like so

    Intent intent;
    intent = new Intent(m_context, booking.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    m_context.startActivity(intent);```

My app builds but crashes with the error
代码语言:javascript
复制
>  Error inflating class   android.support.v7.widget.ScrollingTabContainerView.TabView
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 
* >  02-23 16:54:11.061 14404-14404/com.example.application\_name E/AndroidRuntime: FATAL EXCEPTION: main                                                                                  Process: com.example.application\_name, PID: 14404                                                                                  java.lang.RuntimeException: Unable to start activity   ComponentInfo{com.example.application\_name/com.example.application\_name.booking}:   android.view.InflateException: Binary XML file line #7: Error   inflating class   android.support.v7.widget.ScrollingTabContainerView.TabView                                                                                      at   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198)                                                                                      at   android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)                                                                                      at android.app.ActivityThread.access$800(ActivityThread.java:139)                                                                                      at   android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)                                                                                      at android.os.Handler.dispatchMessage(Handler.java:102)                                                                                      at android.os.Looper.loop(Looper.java:136)                                                                                      at android.app.ActivityThread.main(ActivityThread.java:5086)                                                                                      at java.lang.reflect.Method.invokeNative(Native Method)                                                                                      at java.lang.reflect.Method.invoke(Method.java:515)                                                                                      at   com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)                                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)                                                                                      at dalvik.system.NativeStart.main(Native Method)                                                                                   Caused by: android.view.InflateException: Binary XML file line #7:   Error inflating class   android.support.v7.widget.ScrollingTabContainerView.TabView                                                                                      at   android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707)                                                                                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)                                                                                      at android.view.LayoutInflater.inflate(LayoutInflater.java:492)                                                                                      at android.view.LayoutInflater.inflate(LayoutInflater.java:397)                                                                                      at android.view.LayoutInflater.inflate(LayoutInflater.java:353)                                                                                      at   android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256)                                                                                      at   android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)                                                                                      at com.example.webook.webook.booking.onCreate(booking.java:29)                                                                                      at android.app.Activity.performCreate(Activity.java:5248)                                                                                      at   android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)                                                                                      at   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)                                                                                      at   android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)                                                                                       at android.app.ActivityThread.access$800(ActivityThread.java:139)                                                                                       at   android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)                                                                                       at android.os.Handler.dispatchMessage(Handler.java:102)                                                                                       at android.os.Looper.loop(Looper.java:136)                                                                                       at android.app.ActivityThread.main(ActivityThread.java:5086)                                                                                       at java.lang.reflect.Method.invokeNative(Native Method)                                                                                       at java.lang.reflect.Method.invoke(Method.java:515)                                                                                       at   com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)                                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)                                                                                       at dalvik.system.NativeStart.main(Native Method)                                                                                    Caused by: java.lang.ClassNotFoundException: Didn't find class   "android.support.v7.widget.ScrollingTabContainerView.TabView" on path:   DexPathList[[zip file   "/data/app/com.example.webook.webook-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.webook.webook-2,   /vendor/lib, /system/lib]]                                                                                      at   dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)                                                                                      at java.lang.ClassLoader.loadClass(ClassLoader.java:497)                                                                                      at java.lang.ClassLoader.loadClass(ClassLoader.java:457)                                                                                      at android.view.LayoutInflater.createView(LayoutInflater.java:559)                                                                                      at   android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)                                                                                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)                                                                                       at android.view.LayoutInflater.inflate(LayoutInflater.java:492)                                                                                       at android.view.LayoutInflater.inflate(LayoutInflater.java:397)                                                                                       at android.view.LayoutInflater.inflate(LayoutInflater.java:353)                                                                                       at   android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256)                                                                                       at   android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)                                                                                       at com.example.webook.webook.booking.onCreate(booking.java:29)                                                                                       at android.app.Activity.performCreate(Activity.java:5248)                                                                                       at   android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)                                                                                       at   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)                                                                                       at   android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)                                                                                       at android.app.ActivityThread.access$800(ActivityThread.java:139)                                                                                       at   android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)                                                                                       at android.os.Handler.dispatchMessage(Handler.java:102)                                                                                       at android.os.Looper.loop(Looper.java:136)                                                                                       at android.app.ActivityThread.main(ActivityThread.java:5086)                                                                                       at java.lang.reflect.Method.invokeNative(Native Method)                                                                                       at java.lang.reflect.Method.invoke(Method.java:515)                                                                                       at   com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)                                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)                                                                                       at dalvik.system.NativeStart.main(Native Method)```
*/
>  

This is my Asyntask

```javascript

包装com.example.webook.webook;

进口android.content.Context;

进口android.content.Intent;

进口android.net.Uri;

进口android.os.Looper;

进口android.util.Log;

进口android.widget.Toast;

进口com.android.volley.Request;

进口com.android.volley.RequestQueue;

进口com.android.volley.Response;

进口com.android.volley.VolleyError;

进口com.android.volley.toolbox.JsonArrayRequest;

进口com.android.volley.toolbox.JsonObjectRequest;

进口com.android.volley.toolbox.JsonRequest;

进口com.android.volley.toolbox.StringRequest;

进口com.android.volley.toolbox.Volley;

导入com.google.android.gms.gcm.GoogleCloudMessaging;

进口org.json.JSONObject;

进口java.util.HashMap;

进口java.util.Map;

/**

  • 由bhargavpanth于10月02/16创建。 */ 公共类LoginAsyncTask扩展了android.os.AsyncTask{
代码语言:javascript
复制
Context m_context;
代码语言:javascript
复制
String m_name,m_email,m_password;
代码语言:javascript
复制
public LoginAsyncTask(Context context, String email, String pasword){
代码语言:javascript
复制
    m_context = context;
代码语言:javascript
复制
    m_email=email;
代码语言:javascript
复制
    m_password=pasword;
代码语言:javascript
复制
}
代码语言:javascript
复制
@Override
代码语言:javascript
复制
protected String doInBackground(String... params) {
代码语言:javascript
复制
    Looper.prepare();
代码语言:javascript
复制
    try{
代码语言:javascript
复制
        final RequestQueue queue = Volley.newRequestQueue(m_context);
代码语言:javascript
复制
        JSONObject js = new JSONObject();
代码语言:javascript
复制
        try {
代码语言:javascript
复制
            JSONObject jsonobject_one = new JSONObject();
代码语言:javascript
复制
            JSONObject jsonobject = new JSONObject();
代码语言:javascript
复制
            jsonobject.put("csrf_token", "");
代码语言:javascript
复制
            js.put("params", jsonobject);
代码语言:javascript
复制
        }catch (Exception e) {
代码语言:javascript
复制
            e.printStackTrace();
代码语言:javascript
复制
        }
代码语言:javascript
复制
        //https://webook.trabacus.com/webook/csrf_token
代码语言:javascript
复制
        JsonObjectRequest jsonObjReq = new JsonObjectRequest(
代码语言:javascript
复制
                Request.Method.POST,"https://webook.trabacus.com/webook/csrf_token", js,
代码语言:javascript
复制
                new Response.Listener<JSONObject>() {
代码语言:javascript
复制
                    @Override
代码语言:javascript
复制
                    public void onResponse(JSONObject response) {

// Log.d("tagd",response.result.csrf_token());

代码语言:javascript
复制
                        try{
代码语言:javascript
复制
                            JSONObject ob=response.getJSONObject("result");
代码语言:javascript
复制
                            String csrf=ob.getString("csrf_token");
代码语言:javascript
复制
                            //rid,csrf,name,email,password
代码语言:javascript
复制
                            JSONObject js = new JSONObject();
代码语言:javascript
复制
                            try {
代码语言:javascript
复制
                                JSONObject jsonobject = new JSONObject();
代码语言:javascript
复制
                                jsonobject.put("csrf_token",csrf);
代码语言:javascript
复制
                                jsonobject.put("login",m_email);
代码语言:javascript
复制
                                jsonobject.put("password",m_password);
代码语言:javascript
复制
                                jsonobject.put("db","Odoo-9");
代码语言:javascript
复制
                                js.put("params", jsonobject);
代码语言:javascript
复制
                                JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, "https://webook.trabacus.com/webook/login", js, new Response.Listener<JSONObject>() {
代码语言:javascript
复制
                                    @Override
代码语言:javascript
复制
                                    public void onResponse(JSONObject response) {
代码语言:javascript
复制
                                        Log.d("tagd", response.toString());
代码语言:javascript
复制
                                        Intent intent;
代码语言:javascript
复制
                                        intent = new Intent(m_context, booking.class);
代码语言:javascript
复制
                                        //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
代码语言:javascript
复制
                                        m_context.startActivity(intent);
代码语言:javascript
复制
                                    }
代码语言:javascript
复制
                                },
代码语言:javascript
复制
                                        new Response.ErrorListener() {
代码语言:javascript
复制
                                            @Override
代码语言:javascript
复制
                                            public void onErrorResponse(VolleyError error) {
代码语言:javascript
复制
                                                Log.d("tagd",error.toString());
代码语言:javascript
复制
                                            }
代码语言:javascript
复制
                                        }){
代码语言:javascript
复制
                                    @Override
代码语言:javascript
复制
                                    public Map<String, String> getHeaders(){
代码语言:javascript
复制
                                        HashMap<String,String> headers=new HashMap<>();
代码语言:javascript
复制
                                        headers.put("Content-Type","application/json; charset=utf-8");
代码语言:javascript
复制
                                        return headers;
代码语言:javascript
复制
                                    }
代码语言:javascript
复制
                                };
代码语言:javascript
复制
                                queue.add(jsonObjReq);
代码语言:javascript
复制
                            }catch (Exception e) {
代码语言:javascript
复制
                                e.printStackTrace();
代码语言:javascript
复制
                            }
代码语言:javascript
复制
                            Log.d("tagd",ob.getString("csrf_token"));
代码语言:javascript
复制
                        }catch (Exception e){
代码语言:javascript
复制
                        }

// msgResponse.setText(response.toString());

// hideProgressDialog();

代码语言:javascript
复制
                    }
代码语言:javascript
复制
                }, new Response.ErrorListener() {
代码语言:javascript
复制
            @Override
代码语言:javascript
复制
            public void onErrorResponse(VolleyError error) {
代码语言:javascript
复制
                Log.d("tagd", "Error: " + error.getMessage());

// hideProgressDialog();

代码语言:javascript
复制
            }
代码语言:javascript
复制
        }) {
代码语言:javascript
复制
            /**
代码语言:javascript
复制
             * Passing some request headers
             */
            @Override
            public Map<String, String> getHeaders() {
                HashMap<String, String> headers = new HashMap<String, String>();
                headers.put("Content-Type", "application/json; charset=utf-8");
                return headers;
            }
        };
        queue.add(jsonObjReq);

// StringRequest sr =新StringRequest(Request.Method.POST,"https://webook.trabacus.com/webook/csrf_token",新Response.Listener()“){

// @覆盖

// public void onResponse(字符串响应){

// Log.d("tagd",答复);

// }

// },新Response.ErrorListener() {

// @覆盖

//公共空onErrorResponse(VolleyError错误){

// Toast.makeText(m_context,error.toString(),Toast.LENGTH_LONG).show();

// }

// }{

// @覆盖

//受保护Map getParams(){

// Map params =新HashMap();

// params.put("csrf_token“、"");

//返回params;

// }

//

// @覆盖

// public Map getHeaders(){

// Map params =新HashMap();

// params.put(“内容-类型”、“应用程序/x-www-form-urlencoded”);

//返回params;

// }

// };

// queue.add();

代码语言:javascript
复制
    }catch (Exception e){
代码语言:javascript
复制
        Toast.makeText(m_context,e.toString(),Toast.LENGTH_LONG).show();
代码语言:javascript
复制
    }
代码语言:javascript
复制
    return null;
代码语言:javascript
复制
}

}

代码语言:javascript
复制
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-23 11:53:06

doInBackground在非ui线程中运行.您不能在这里执行ui操作。

或者在onPostExecute方法中的push活动操作中使用此方法

或使用以下方法

代码语言:javascript
复制
runOnUiThread (new Thread(new Runnable() { 
         public void run() {
             Intent intent= new Intent(m_context, booking.class);
    m_context.startActivity(intent);
         }
     }));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35575535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档