由于custon ListView中的NullPointerException而导致应用程序崩溃

安德烈

我正在使用一个列表视图,单击该列表视图将打开一个对话框,其中包含一个编辑文本和一个按钮。单击按钮时,在editText中输入的值将保存在以前按下过的listview项的textView中。问题是,如果我重新打开该应用程序,该值将不再保存。我试图使用sharedPrefences保存它,但是它崩溃了,并显示了nullpointerexception,无法处理。

NoteAdapter.java:

 package com.cngcnasaud.orar;

    import java.util.Arrays;

    import android.app.Dialog;
    import android.content.Context;
    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.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.TextView;

    public class NoteAdapter extends BaseAdapter {

        String[] result;
        Context context;
        int[] imageId;
        private static LayoutInflater inflater = null;
        private Dialog dialog;
        String[] savedEntries;
        String[] saved = null;

        public NoteAdapter(Note note, String[] saved, String[] prgmNameList) {
            // TODO Auto-generated constructor stub
            result = prgmNameList;
            context = note;
            inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            if (saved == null) {
                savedEntries = new String[result.length];
                Arrays.fill(savedEntries, "");
            } else
                savedEntries = saved;

        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return result.length;
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return savedEntries[position];
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        public class Holder {
            TextView tv;
            ImageView img;
            public TextView text;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub

            final Holder holder = new Holder();
            View rowView;
            rowView = inflater.inflate(R.layout.note_items, null);
            holder.tv = (TextView) rowView.findViewById(R.id.textView1);
            holder.text = (TextView) rowView.findViewById(R.id.textView2);
            holder.text.setText(savedEntries[position]);
            holder.img = (ImageView) rowView.findViewById(R.id.imageView1);

            rowView.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    dialog = new Dialog(context);
                    dialog.setContentView(R.layout.dialog);
                    dialog.setTitle("Materie:" + result[position]);

                    final EditText txtMode = (EditText) dialog
                            .findViewById(R.id.dialog);
                    Button btnSave = (Button) dialog.findViewById(R.id.bsave);

                    btnSave.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {

                            String data = txtMode.getText().toString();
                            holder.text.setText(data);

                            savedEntries[position] = data;

                            dialog.dismiss();
                            Log.d("data", data);
                        }
                    });
                    dialog.show();
                }

            });
            return rowView;
        }

    }

日志猫:

04-19 04:14:32.130: E/AndroidRuntime(947): FATAL EXCEPTION: main
04-19 04:14:32.130: E/AndroidRuntime(947): Process: com.cngcnasaud.orar, PID: 947
04-19 04:14:32.130: E/AndroidRuntime(947): java.lang.NullPointerException
04-19 04:14:32.130: E/AndroidRuntime(947):  at com.cngcnasaud.orar.NoteAdapter.getView(NoteAdapter.java:76)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.AbsListView.obtainView(AbsListView.java:2263)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.ListView.makeAndAddView(ListView.java:1790)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.ListView.fillDown(ListView.java:691)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.ListView.fillFromTop(ListView.java:752)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.ListView.layoutChildren(ListView.java:1630)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.AbsListView.onLayout(AbsListView.java:2091)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.View.layout(View.java:14817)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.View.layout(View.java:14817)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.View.layout(View.java:14817)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.View.layout(View.java:14817)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.View.layout(View.java:14817)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.View.layout(View.java:14817)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.View.layout(View.java:14817)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.View.layout(View.java:14817)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.View.layout(View.java:14817)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-19 04:14:32.130: E/AndroidRuntime(947):  at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:374)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.View.layout(View.java:14817)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.View.layout(View.java:14817)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.ViewGroup.layout(ViewGroup.java:4631)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1987)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1744)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.Choreographer.doCallbacks(Choreographer.java:574)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.Choreographer.doFrame(Choreographer.java:544)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.os.Handler.handleCallback(Handler.java:733)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.os.Handler.dispatchMessage(Handler.java:95)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.os.Looper.loop(Looper.java:136)
04-19 04:14:32.130: E/AndroidRuntime(947):  at android.app.ActivityThread.main(ActivityThread.java:5017)
04-19 04:14:32.130: E/AndroidRuntime(947):  at java.lang.reflect.Method.invokeNative(Native Method)
04-19 04:14:32.130: E/AndroidRuntime(947):  at java.lang.reflect.Method.invoke(Method.java:515)
04-19 04:14:32.130: E/AndroidRuntime(947):  at com.android.internal.os.

NoteAdapter.java中的第76行:

holder.text.setText(savedEntries[position]);

适配器的构造函数-Note.java:

package com.cngcnasaud.orar;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.view.Menu;

import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class Note extends Activity {

    public static final ListAdapter NoteAdapter = null;
    ListView lv;
    Context context;
    ArrayList<?> prgmName;
    TextView text;

    public static String[] prgmNameList = { "Romana   - ", "Matematica   - ",
            "Lb. Engleza   - ", "Lb. Germana/Franceza - ", "Istorie   - ",
            "Geografie   - ", "Biologie   - ", "Fizica   - ", "Ed. Fizica   - " };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.note_listview);

        text = (TextView) findViewById(R.id.textView2);

        context = this;

        lv = (ListView) findViewById(R.id.listView);
        lv.setAdapter(new NoteAdapter(this, prgmNameList, null));

    }

    @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
    protected void onStop() {
        // TODO Auto-generated method stub

        NoteAdapter adapter = (NoteAdapter) lv.getAdapter();

        // Variable is public for clarity.
        String toSave = EncodeDecode.encode(adapter.savedEntries);
        SharedPreferences.Editor editor = getSharedPreferences("LV Data",
                MODE_PRIVATE).edit();
        editor.putString("TVEntries", toSave);
        editor.commit();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub

        SharedPreferences prefs = getSharedPreferences("LV Data", MODE_PRIVATE);
        String encoded = prefs.getString("TVEntries", "");

        String[] entries;
        if (encoded.equals(""))
            entries = null;
        else
            entries = EncodeDecode.decode(encoded);

        NoteAdapter adapter = (NoteAdapter) lv.getAdapter();
        adapter.savedEntries = entries;
        lv.setAdapter(adapter);

        super.onResume();
    }

}

EncodeDecode.java:

package com.cngcnasaud.orar;

import java.util.ArrayList;
import java.util.Arrays;
import java.lang.StringBuffer;

public class EncodeDecode
{

  public static void main(String[] args)
  {
    //Test functionality.
    String[] toEncode = {"a?b","c,d,", "asdas,dasd?,,,,,", "asdsad*\t      "};
    String encodedString = encode(toEncode);
    String[] decodedArray = decode(encodedString);
    System.out.println("Original Array: " + Arrays.toString(toEncode));
    System.out.println("Encoded String: " + encodedString);
    System.out.println("Decoded Array: " + Arrays.toString(decodedArray));
    System.out.println();
    System.out.println("Testing equality of the arrays.....");
    if(encode(toEncode).equals(encode(decodedArray)))
      System.out.println("Passed!");
    else
       System.out.println("Failed :(!");
  }

  /**  
   *  Function: encode
   *  --------------------
   *  Encode a String array into a single String.
   *  
   *  toEncode: the String array to be encoded.
   *
   *  returns: the encoded string.
   */
  public static String encode(String[] toEncode)
  {
    StringBuffer strBuf = new StringBuffer();
    for(int i = 0; i < toEncode.length; i++)
    {
      /*Retrieve a representation of the current string element that is
      easier to modify.*/
      StringBuffer curString = new StringBuffer(toEncode[i]);
      for(int j = 0; j < curString.length(); j++)
        //If we see a "break" character, prepend another "break" character to it.
        if(curString.charAt(j) == '?')
        {
          curString.insert(j, '?');
          j++;
        }
        //If we see a delimiter character, prepend "break" character to it.
        else if(curString.charAt(j) == ',')
        {
          curString.insert(j, '?');
          j++;
        }

      //Add the delimiter to the encoded string.
      strBuf.append(curString + ",");

    }
    return strBuf.toString();
  }

  /**  
   *   Function: decode
   *  --------------------
   *  Decode an encoded string into its original array..
   *  
   *  toDecode: the String to be decoded.
   *
   *  returns: the decoded String array.
   */
  public static String[] decode(String toDecode)
  {
    /*We utilize an ArrayList, since the exact number of 
    string elements is inderterminate*/
    ArrayList<String> decoded = new ArrayList<String>();

    /*Retrieve a representation of the current string element that is
    easier to modify.*/
    StringBuffer encodedStr = new StringBuffer(toDecode);

    //The starting point of the current isolated string to add/append.
    int currIndex = 0;

    for(int i = 0; i < encodedStr.length(); i++)
    {
      /*If we see the "break character" remove it, and skip
      the following character*/
      if(encodedStr.charAt(i) == '?')
        encodedStr.deleteCharAt(i);

      /*If we see a delimiter, add what we have amassed
      so far to the list.*/
      else if(encodedStr.charAt(i) == ',')
      {
        decoded.add(encodedStr.substring(currIndex, i));

        //Update the starting point.
        currIndex = i + 1;
      }
    }

    String[] toReturn = new String[decoded.size()];
    return decoded.toArray(toReturn);
  }
}

EncodeDecode:java中的第39行:

for(int i = 0; i < toEncode.length; i++)
东风

根据您的调试savedEntries == null这就是此处出现NullPointerException的原因:savedEntries[position]

由于您说过这些数组值将在以后由用户提供,因此您可以例如添加一个空检查来避免此问题,如下所示:

if (savedEntries != null) {
    holder.text.setText(savedEntries[position]);
} else {
    holder.text.setText(""); 
}

更新:

看起来您尝试textView2在2个不同的布局xml中查找带有id的textview 一个在note_items布局中,另一个在中note_listview

请参阅注释活动

    setContentView(R.layout.note_listview);

    text = (TextView) findViewById(R.id.textView2);

参见NoteAdapter中

    rowView = inflater.inflate(R.layout.note_items, null);
    holder.tv = (TextView) rowView.findViewById(R.id.textView1);
    holder.text = (TextView) rowView.findViewById(R.id.textView2);

==>甚至不用看xml布局(您没有在其中讨论),我就能知道这不好。原因是您具有textView2不同布局的textviews id ,这很糟糕,因为id必须是唯一的,或者textView2在note_items布局中只是缺少。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

由于NullPointerException而导致应用程序崩溃

来自分类Dev

由于C ++ Qt多线程应用程序中删除指针而导致崩溃

来自分类Dev

RecyclerView中的RecyclerView,由于高内存消耗导致应用程序崩溃

来自分类Dev

由于newrelic异常,应用程序在onCreate中崩溃

来自分类Dev

由于 Android Studio 中的 ClassCastException,应用程序崩溃

来自分类Dev

为什么软键盘应用程序由于java.lang.NullPointerException而崩溃?

来自分类Dev

由于“ Double”数据类型的值为空,导致应用程序崩溃(android)

来自分类Dev

由于未捕获的异常'NSUnknownKeyException而导致终止应用程序崩溃

来自分类Dev

由于 IllegalArgumentException 导致应用程序崩溃:com.android.internal.policy.impl.PhoneWindow

来自分类Dev

如何避免由于单击按钮而导致 android 应用程序崩溃?

来自分类Dev

由于 IOException 导致程序崩溃

来自分类Dev

由于文档目录中存储的图像过多,应用程序正在接收内存警告。应用崩溃

来自分类Dev

应用程序由于ios 7中的UIAlerview而崩溃,但在ios 6中工作正常

来自分类Dev

当图像从核心数据保存在集合视图中时,由于内存错误导致应用程序崩溃

来自分类Dev

由于setCotentView(R.layout_file_name)行的内存不足异常,导致应用程序崩溃

来自分类Dev

应用程序由于beginlistendata()函数中的looper.prepare()而崩溃

来自分类Dev

应用程序由于内存压力而不断崩溃

来自分类Dev

iPhone应用程序由于内存压力而崩溃

来自分类Dev

应用程序崩溃并显示消息“由于内存错误而终止”

来自分类Dev

由于V / GoogleSignatureVerifier,Android应用程序崩溃:签名无效

来自分类Dev

CodenameOne IOS应用程序由于空threadToDelete而崩溃

来自分类Dev

iPhone应用程序由于内存压力而崩溃

来自分类Dev

应用程序由于内存压力而不断崩溃

来自分类Dev

由于操作栏,应用程序在较小的设备上崩溃

来自分类Dev

由于ucrtbase.dll,应用程序崩溃

来自分类Dev

由于对话框,我的应用程序崩溃

来自分类Dev

由于 C# 中的几个大内存字典对象导致应用程序性能下降

来自分类Dev

由于NSInvalidArgumentException而导致SpriteKit终止应用程序

来自分类Dev

由于 NSG 导致的 Azure 应用程序网关 502 错误

Related 相关文章

  1. 1

    由于NullPointerException而导致应用程序崩溃

  2. 2

    由于C ++ Qt多线程应用程序中删除指针而导致崩溃

  3. 3

    RecyclerView中的RecyclerView,由于高内存消耗导致应用程序崩溃

  4. 4

    由于newrelic异常,应用程序在onCreate中崩溃

  5. 5

    由于 Android Studio 中的 ClassCastException,应用程序崩溃

  6. 6

    为什么软键盘应用程序由于java.lang.NullPointerException而崩溃?

  7. 7

    由于“ Double”数据类型的值为空,导致应用程序崩溃(android)

  8. 8

    由于未捕获的异常'NSUnknownKeyException而导致终止应用程序崩溃

  9. 9

    由于 IllegalArgumentException 导致应用程序崩溃:com.android.internal.policy.impl.PhoneWindow

  10. 10

    如何避免由于单击按钮而导致 android 应用程序崩溃?

  11. 11

    由于 IOException 导致程序崩溃

  12. 12

    由于文档目录中存储的图像过多,应用程序正在接收内存警告。应用崩溃

  13. 13

    应用程序由于ios 7中的UIAlerview而崩溃,但在ios 6中工作正常

  14. 14

    当图像从核心数据保存在集合视图中时,由于内存错误导致应用程序崩溃

  15. 15

    由于setCotentView(R.layout_file_name)行的内存不足异常,导致应用程序崩溃

  16. 16

    应用程序由于beginlistendata()函数中的looper.prepare()而崩溃

  17. 17

    应用程序由于内存压力而不断崩溃

  18. 18

    iPhone应用程序由于内存压力而崩溃

  19. 19

    应用程序崩溃并显示消息“由于内存错误而终止”

  20. 20

    由于V / GoogleSignatureVerifier,Android应用程序崩溃:签名无效

  21. 21

    CodenameOne IOS应用程序由于空threadToDelete而崩溃

  22. 22

    iPhone应用程序由于内存压力而崩溃

  23. 23

    应用程序由于内存压力而不断崩溃

  24. 24

    由于操作栏,应用程序在较小的设备上崩溃

  25. 25

    由于ucrtbase.dll,应用程序崩溃

  26. 26

    由于对话框,我的应用程序崩溃

  27. 27

    由于 C# 中的几个大内存字典对象导致应用程序性能下降

  28. 28

    由于NSInvalidArgumentException而导致SpriteKit终止应用程序

  29. 29

    由于 NSG 导致的 Azure 应用程序网关 502 错误

热门标签

归档