2013-04-28 211 views
2

除了当用户停止使用足够长的屏幕锁定时,我的应用程序运行良好,当他们解锁它时,应用程序崩溃,我有点不知道为什么。以下是错误:屏幕解锁时崩溃

enter image description here

这里是懒惰适配器:

package com.buhz.helpers; 

import java.util.ArrayList;  
import java.util.HashMap; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 


import com.buhz.login.R; 
import com.buhz.login.TabHostFragmentActivity; 
import com.loopj.android.image.SmartImageView; 



public class LazyAdapter extends BaseAdapter { 

    private Activity activity; 
    private ArrayList<HashMap<String, String>> data; 
    private static LayoutInflater inflater=null; 
    public ImageLoader imageLoader; 

    public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) { 
     activity = a; 
     data=d; 
     inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     imageLoader=new ImageLoader(activity.getApplicationContext()); 
    } 

    public int getCount() { 
     return data.size(); 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi=convertView; 
     if(convertView==null) 
      vi = inflater.inflate(R.layout.list_row, null); 

     TextView name = (TextView)vi.findViewById(R.id.name); // title 
     TextView message = (TextView)vi.findViewById(R.id.message); // artist name 
     TextView created = (TextView)vi.findViewById(R.id.created); // duration 
     SmartImageView thumb_image = (SmartImageView) vi.findViewById(R.id.list_image); 



     HashMap<String, String> update = new HashMap<String, String>(); 
     update = data.get(position); 

     // Setting all values in listview 
     name.setText(update.get("name")); 
     message.setText(update.get("message")); 
     created.setText(update.get("created")); 
     thumb_image.setImageUrl(update.get("thumb_img")); 
     name.setOnClickListener(new myOnClickListener(position)); 
     thumb_image.setOnClickListener(new myOnClickListener(position)); 
     return vi; 
    } 

    public class myOnClickListener implements OnClickListener{ 
     private int position; 
     private String clicked_uid; 
     public myOnClickListener(int position){ 
      this.position=position; 
     } 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 


      HashMap<String, String> update = new HashMap<String, String>(); 
      update = data.get(position); 
      Log.i("Update Position:", update.toString()); 
      clicked_uid=update.get("uid"); 
      Log.d("Clicked UID:", clicked_uid+""); 
      Intent i = new Intent(activity.getApplicationContext() , TabHostFragmentActivity.class); 
      i.putExtra("profile_uid", clicked_uid); 
      activity.startActivity(i); 
      activity.finish(); 

     } 

    } 
} 
+2

从您粘贴的logcat中,它看起来像运行Activity onCreate之前引发的异常。所以你的LazyAdapter获得了一个空值。确保您的生命周期事件按顺序触发,并且您没有尝试在正确创建活动之前实例化适配器。 – 2013-04-28 22:57:43

+0

你是什么意思,当你说“确保你的生命周期事件顺序触发”...截至到现在我使用FragmentActivity和一个片段,我有代码的唯一生命周期方法是onCreate截至目前。如果我没有实现它们,为我处理生命周期方法? – ChuckKelly 2013-04-28 23:27:14

+1

我没有清楚地说明它 - 基本上你必须确保你在生命周期的正确时间实例化LazyAdapter。 – 2013-04-29 00:22:35

回答

0

你必须确保你正在处理所有可能的状态查看申请状态。当您的应用程序状态进入未处理状态(如onResume或onStart)时,会发生此问题。

本文将帮助你了解每个状态,当它被调用

http://www.android-app-market.com/android-activity-lifecycle.html

+0

当涉及到碎片时,这非常有用,这是问题所在。 ive发现它的bc片段出于某种原因加载速度比活动onResume快,所以我的活动上下文尚未准备好,我只是不知道该怎么办 – ChuckKelly 2013-04-29 02:13:49

2

由于the doc说:

When a configuration change occurs at runtime, the activity is shut down 
and restarted by default, but declaring a configuration with this attribute 
will prevent the activity from being restarted. 

所以我改变AndroidManifest.xml中包括所有配置。

android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|screenSize|smallestScreenSize|layoutDirection" 

它适用于我。