无法启动WindowManager BadTokenException导致的Activity组件信息

时间:2015-11-01 23:31:27

标签: android android-fragments android-activity

嘿我正在开发一个有一个片段的应用程序,我从该片段调用一个活动。在片段中我已经定制了列表视图。在调用活动时,我收到此错误。

日志

  FATAL EXCEPTION: main
    11-02 04:46:26.466: E/AndroidRuntime(6973): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.prototype/activities.CategoryAct}: java.lang.NullPointerException
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at android.app.ActivityThread.access$600(ActivityThread.java:156)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at android.os.Handler.dispatchMessage(Handler.java:99)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at android.os.Looper.loop(Looper.java:153)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at android.app.ActivityThread.main(ActivityThread.java:5297)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at java.lang.reflect.Method.invokeNative(Native Method)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at java.lang.reflect.Method.invoke(Method.java:511)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at dalvik.system.NativeStart.main(Native Method)
    11-02 04:46:26.466: E/AndroidRuntime(6973): Caused by: java.lang.NullPointerException
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:143)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at android.app.AlertDialog.<init>(AlertDialog.java:98)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at android.app.ProgressDialog.<init>(ProgressDialog.java:77)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at activities.CategoryAct$StoreUtil.onPreExecute(CategoryAct.java:124)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at android.os.AsyncTask.execute(AsyncTask.java:534)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at activities.CategoryAct.onCreate(CategoryAct.java:77)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at android.app.Activity.performCreate(Activity.java:5122)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
    11-02 04:46:26.466: E/AndroidRuntime(6973):     ... 11 more

在活动中,我正在设置另一个列表视图,使用相同的自定义适配器和列表视图布局。

以下是活动的代码:

package activities;

import java.util.ArrayList;

import org.json.JSONException;
import org.json.JSONObject;

import com.example.prototype.R;
import com.example.prototype.utility.JSONUtil;

import custom.list.view.CustomListViewAdapter;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AbsListView.OnScrollListener;

public class CategoryAct extends  Activity implements OnScrollListener,OnItemClickListener{

    ArrayList<String> images=new ArrayList<String>();
    ArrayList<String> offer=new ArrayList<String>();
    ArrayList<String> cat=new ArrayList<String>();
    ArrayList<String> store=new ArrayList<String>();
    ArrayList<String> exp_date=new ArrayList<String>();
    ArrayList<String> url_visit=new ArrayList<String>();
    ArrayList<String> code=new ArrayList<String>();
    String res;
    boolean init_data_loaded=false; 
    int count=0;
    int limit=0;
    int curr_pos;
    String url= "its a private url";
     ListView list;
    String img_add;
    Context ctx;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.category_act);
        ctx=getApplicationContext();
        list=(ListView) findViewById(R.id.cat_act_list);
        Intent i=getIntent();
        Bundle b=i.getBundleExtra("category");
        Log.e("cat_act", b.getString("category"));
        android.app.ActionBar actionBar = getActionBar();
        actionBar.setHomeButtonEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);
        list.setOnScrollListener((OnScrollListener) this);
        list.setOnItemClickListener((OnItemClickListener) this);        

        if(isInternetOn())
        new StoreUtil().execute();
    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        if (id ==android.R.id.home) {
        Log.e("cat_act", "Home clicked");
this.finish();
        return true;
        }

        if (id == R.id.search_menu) {
            Toast.makeText(getApplicationContext(), "Searched Clicked ", Toast.LENGTH_LONG).show();
            return true;
        }

        if (id == R.id.share_menu) {
            Toast.makeText(getApplicationContext(), "Share Clicked ", Toast.LENGTH_LONG).show();
            return true;

        }   
        return super.onOptionsItemSelected(item);
    }



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

        ProgressDialog pb;

        @Override
    protected void onPreExecute() {
            super.onPreExecute();
               pb=new ProgressDialog(getApplication());

            if(init_data_loaded==false){    
                pb.setMessage("Loading Data...");
                            pb.setIndeterminate(false);
                pb.setCancelable(true);
            if(pb==null){

                Log.e("background_method_category", "pb is null");      

            }else
                Log.e("background_method_category", "pb is not null");      

                pb.show();}


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

                Log.e("background_method_category", "In the background method");        
                if(init_data_loaded==false){
                JSONUtil util=new JSONUtil();
                res=util.setConnection(url, "get");
                init_data_loaded=true; 
            }       

              return null;

        }

        void setData(){

Log.e("listview_end", "called");
             try {

                JSONObject jobj = new JSONObject(res);

                Log.e("background_method_category", "jobject returned");
                JSONObject jres;


                while(count<10){
                jres= jobj.getJSONObject(""+limit);
                count++;
                limit++;
               code.add(jres.getString("coupon_code"));
                String store_name=jres.getString("stores");
               store.add(store_name);
                String url_visit_name=jres.getString("coupon_aff_url");
                url_visit.add(url_visit_name);
                String expiry_date=jres.getString("expire_date");
                exp_date.add(expiry_date);
                String coupon_title=jres.getString("coupon_title");

                String cat_name=jres.getString("coupon_category");

                String temp_url;
                String img_url=jres.getString("url");
                    {

                        temp_url=img_url.replace("egravity.in", "sellurdreams.com");


                    }
                    images.add(temp_url);
                    offer.add(coupon_title);
                    cat.add(cat_name);


                }
            Log.e("background_method_category", "out of while loop");    
                } catch (JSONException e) {
                e.printStackTrace();

                }
        }


        @Override


        protected void onPostExecute(String result) {

         /* if(pb.isShowing()){
            pb.dismiss();
            }
//         */


            setData();

            CustomListViewAdapter adapt=new CustomListViewAdapter(ctx, images, offer, cat);
            list.setAdapter(adapt);
            Log.e("background_method_category",""+curr_pos);
   list.setSelection(curr_pos-2);
            super.onPostExecute(result);


        }

    }




    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        // TODO Auto-generated method stub

    }




    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {

        if (firstVisibleItem+visibleItemCount==totalItemCount && totalItemCount!=0) {
            Log.e("background_method_category", "end reached"+images.size());
            count=0;
            curr_pos=totalItemCount;

            new StoreUtil().execute();

        }
        if(totalItemCount%10==0)

            System.gc();

    }








    @Override
    public void onItemClick(AdapterView<?> parent, View view, final int position,
            long id) {
        final Dialog dialog = new Dialog(getApplication());
        dialog.setContentView(R.layout.dialog);
        dialog.setTitle("Code Copied");
        dialog.setTitle( Html.fromHtml("<font color='#B21313'>Code Copied</font>"));
        Button cancel=(Button) dialog.findViewById(R.id.cancel_dialog);

        Button proceed=(Button) dialog.findViewById(R.id.proceed_dialog);
        int dividerid=dialog.getContext().getResources().getIdentifier("android:id/titleDivider", null, null);
        View divider=dialog.findViewById(dividerid);
        divider.setBackgroundColor(getResources().getColor(R.color.background_tab));
         TextView content_dialog = (TextView) dialog.findViewById(R.id.content_dialog);
         content_dialog.setText("The coupon code has been copied to your clipboard.Click below to start shopping on "+store.get(position)+". Expiry Date of coupon is : "+exp_date.get(position));
         dialog.show();

        cancel.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                dialog.dismiss();
            }
        });
proceed.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        ClipboardManager clipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); 
        ClipData clip = ClipData.newPlainText("code_lootainment", code.get(position));
        clipboard.setPrimaryClip(clip);
        Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url_visit.get(position)));
        dialog.dismiss();
        startActivity(myIntent);
    }
});
    }



     public final boolean isInternetOn() {

            // get Connectivity Manager object to check connection
            ConnectivityManager connec =  
                           (ConnectivityManager)ctx.getSystemService(ctx.CONNECTIVITY_SERVICE);

               // Check for network connections
                if ( connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED ||
                     connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING ||
                     connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING ||
                     connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED ) {

                    // if connected with internet

                    Toast.makeText(ctx, " Connected ", Toast.LENGTH_LONG).show();
                    return true;

                } else if ( 
                  connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED ||
                  connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED  ) {

                    Toast.makeText(ctx, " Not Connected ", Toast.LENGTH_LONG).show();
                    return false;
                }
              return false;
            }









}

2 个答案:

答案 0 :(得分:1)

不要从applicationContext创建对话框。它必须使用活动上下文。 使用活动背景。

 final Dialog dialog = new Dialog(this);

答案 1 :(得分:0)

您拨打new StoreUtil().execute()的电话是NullPointerException

您的StoreUtil<String, String, String> AsyncTask将String作为输入Param,而您正在调用execute()而没有任何参数。

因此,如果您没有任何值作为Param传递,请致电new StoreUtil().execute("")

AsyncTask

的更多信息