2011-09-04 82 views
0

这是我的应用程序的一部分代码,我试图让人们可以查看他们最喜欢的部分。我为它工作。现在我试图让它在onLongClick时允许删除一个选项。我不知道该部分是否工作,因为我目前正在遇到阵列部分中的一个错误,我已经缩小了它的范围。它非常奇怪,因为从我能看到的区别在于它的工作,而不是真的不应该有任何问题。如果你愿意,也许我需要一些新鲜的眼睛看着这个。由于强制关闭阵列

public class Favorites extends ListActivity{ 

    public static final String PREFS_NAME = "Favorites"; 
    String[] title; 
    int favNum, num; 
    int[] category, member; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     grabFav(); 
     num = favNum; 
     num++; 
     if(favNum > -1){ 
      title = new String[num]; 
      category = new int[num]; 
      member = new int[num]; 
      allFavs(); 

      setListAdapter(new ArrayAdapter<String>(this, R.layout.item_list, title)); 

      ListView lv = getListView(); 
      lv.setTextFilterEnabled(true);  
     } 
    } 

    public void grabFav(){ 
     SharedPreferences saved = this.getSharedPreferences(PREFS_NAME, 0); 
     favNum = saved.getInt("FavoriteNum", -1); 
    } 

    public void allFavs(){ 
     SharedPreferences saved = this.getSharedPreferences(PREFS_NAME, 0); 

     for(int i = 0; i< favNum; i++){ 
      title[i] = saved.getString("Title"+i, ""); 
     } 

     for(int n = 0; n< favNum; n++){ 
      category[n] = saved.getInt("Category"+n, 0); 
     } 

     for(int m = 0; m< favNum; m++){ 
      member[m] = saved.getInt("Member"+m, 0); 
     } 
    } 
} 

当该上部看起来像这样

grabFav(); 
    favNum++; 

    if(favNum > 0){ 
     title = new String[favNum]; 
     category = new int[favNum]; 
     member = new int[favNum]; 
     allFavs(); 

它正常工作(不知道的onLongItemClick,因为我通常把它注释掉这样我就可以找到错误)。从我可以告诉它应该工作得很好。我发布了整个班级,你会发现另一个可能会导致问题的错误。这里是日志猫,如果你想看

09-04 11:09:20.576: ERROR/AndroidRuntime(18769): FATAL EXCEPTION: main 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769): java.lang.NullPointerException 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.widget.AbsListView.obtainView(AbsListView.java:1315) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.widget.ListView.makeAndAddView(ListView.java:1727) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.widget.ListView.fillDown(ListView.java:652) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.widget.ListView.fillFromTop(ListView.java:709) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.widget.ListView.layoutChildren(ListView.java:1580) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.widget.AbsListView.onLayout(AbsListView.java:1147) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.view.View.layout(View.java:7035) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.view.View.layout(View.java:7035) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1042) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.view.View.layout(View.java:7035) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.view.View.layout(View.java:7035) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1045) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1727) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.os.Looper.loop(Looper.java:123) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at java.lang.reflect.Method.invoke(Method.java:521) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
09-04 11:09:20.576: ERROR/AndroidRuntime(18769):  at dalvik.system.NativeStart.main(Native Method) 

任何帮助,非常感谢。谢谢

+0

您需要减少代码量,这将有助于您找到问题,并鼓励在SO上提供更多答案。 –

+0

@ Philipp好吧,我减少了一些。我留下了它调用的东西,虽然 – steven

回答

2

你检查,所有的标题字符串你得到实际存在你的喜好,即该行不分配给nulltitle[i]

title[i] = saved.getString("Title"+i, ""); 

也许你错过了零冠军“Title0”,并开始只在“标题1”?

+0

那是我之前修复的问题。列表视图收藏会在下一个收藏被收藏后填充。当favNum首先被调用时,它是-1,直到它在每个最爱之后递增。所以它在for循环中从0开始。这可能与该领域有关,所以我会尝试一些东西。谢谢。 – steven

+0

你在做什么。我基本上只是在几个地方改变了num和favNum的角色,并解决了这个问题。顺便说一下,当我接受删除之后,你碰巧知道更新列表视图的方法吗? – steven

+0

如果您将'ArrayAdapter'存储在'Activity'的实例字段中,则可以使用[ArrayAdapter.remove()](http://developer.android.com/reference/android/widget/ArrayAdapter.html#删除(T))onContextItemSelected()'。 –

0

在使用视图之前,您可以使用此格式立即设置活动内容。我曾经获得空指针异常,每当我叫 之前的观点方法的setContentView方法..希望这会解决您的问题:)

public void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 
setContentView(R.layout.your_activity_xml); 

// your code 

} 

'

+0

我试过了,这是个好主意,但问题仍然存在于数组中。原因我没有setContent视图是因为Google的ListView代码没有。谢谢 – steven