2015-11-01 139 views
0

嘿,我正在開發一個應用程序有一個片段,並從該片段我打電話給一個活動。在片段中,我定製了列表視圖。在調用活動時,我收到了這個錯誤。無法啓動由WindowManager導致的活動組件信息BadTokenException

登錄

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; 
      } 









} 

回答

1

不要的applicationContext創建對話框。它必須使用活動上下文。 使用活動上下文。

final Dialog dialog = new Dialog(this); 
+0

我也是一樣的,Log說: – AnonymousDev

+0

我也一樣,Log說: 11-03 00:19:48.963:E/AndroidRuntime(6808):致命例外:main 11-03 00:19:48.963:E/AndroidRuntime(6808):java.lang.RuntimeException:無法啓動活動ComponentInfo {com.example.prototype/activities.CategoryAct}:java.lang.NullPointerException 11-03 00:19:48.963:E/AndroidRuntime(6808) :引發︰java.lang.NullPointerException 11-03 00:19:48.963:E/AndroidRuntime(6808):\t在android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:140) – AnonymousDev

+0

哎解決了我的問題,thanx @阿米特庫馬爾你是對的,我搞砸了活動thanx人應該傳遞的上下文。 – AnonymousDev

0

您對new StoreUtil().execute()調用拋出NullPointerException

您的StoreUtil<String, String, String> AsyncTask將String作爲輸入參數,而您正在調用​​而沒有任何參數。

所以,如果你沒有任何價值傳遞的帕拉姆就叫new StoreUtil().execute("")

更多的Infor爲AsyncTask

+0

我不這麼認爲它提供錯誤。如果我註釋上預執行和對話框,應用程序正在工作。它無法顯示對話框。 – AnonymousDev