2013-04-28 1 views
2

내 앱은 사용자가 휴대 전화를 길게 사용하는 것을 멈출 때까지 계속 실행되며 앱을 잠금 해제 할 때 화면이 잠길 때까지 멈 춥니 다. 이유는 무엇인지 알 수 없습니다. 여기에 오류 :화면 잠금 해제시 오류 발생

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는 Activity에 대해 null 값을 얻습니다. 라이프 사이클 이벤트가 순서대로 실행되는지 확인하고 활동이 제대로 작성되기 전에 어댑터를 인스턴스화하려고 시도하지 않아야합니다. –

+0

"당신의 라이프 사이클 이벤트가 순서대로 실행되는지 확인하십시오."라고 말할 때 당신은 무엇을 의미합니까? 지금은 FragmentActivity와 단편을 사용하고 있습니다. 코드를 가지고있는 유일한 라이프 사이클 메소드는 onCreate입니다. 내가 그들을 구현하지 않으면 나를 위해 처리되는 라이프 사이클 메소드를 Arnt 했습니까? – ChuckKelly

+1

필자는이를 명확하게 말하지 않았습니다. 기본적으로 라이프 사이클의 적시에 LazyAdapter를 인스턴스화해야합니다. –

답변

0

당신은 모든 가능한 상태를 처리하는 것을 확인하여 응용 프로그램의 상태를 확인해야 :

여기

enter image description here

게으른 어댑터입니다. 이 문제는 응용 프로그램 상태가 onResume 또는 onStart와 같은 처리되지 않은 상태가 될 때 발생합니다. 이 the doc으로

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

+0

이것은 파편에 관해서는별로 도움이되지 않습니다. 이것이 문제입니다. 필자는 어떤 이유에서든 bc 조각이 activity보다 더 빨리 로딩한다는 것을 발견했습니다. 내 활동 컨텍스트가 아직 준비되지 않았기 때문에, 나는 그것에 대해 무엇을 해야할지 잘 모릅니다. – ChuckKelly

2

를 호출 할 때

이 문서에서는 각 상태를 이해하는 데 도움이됩니다 말한다 :

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" 

저에게 효과적입니다.