java - ArrayAdapter 空指针异常

标签 java android arrays

我正在创建一个 ArrayAdapter 并且我得到了一个 NullPointerException 我不知道为什么。由于我是 Android API 的新手,我在过去几天中多次发布有关此文件的帖子,并且我正在努力适应它的工作方式。下面是打印栈

03-26 02:00:35.263: E/AndroidRuntime(1783): FATAL EXCEPTION: main
03-26 02:00:35.263: E/AndroidRuntime(1783): java.lang.NullPointerException
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.widget.AbsListView.obtainView(AbsListView.java:2177)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.widget.ListView.makeAndAddView(ListView.java:1840)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.widget.ListView.fillDown(ListView.java:675)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.widget.ListView.fillFromTop(ListView.java:736)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.widget.ListView.layoutChildren(ListView.java:1655)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.widget.AbsListView.onLayout(AbsListView.java:2012)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.view.View.layout(View.java:14289)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.view.View.layout(View.java:14289)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:349)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.view.View.layout(View.java:14289)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.view.View.layout(View.java:14289)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1976)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1730)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.view.Choreographer.doCallbacks(Choreographer.java:562)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.view.Choreographer.doFrame(Choreographer.java:532)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.os.Handler.handleCallback(Handler.java:730)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.os.Looper.loop(Looper.java:137)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at android.app.ActivityThread.main(ActivityThread.java:5103)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at java.lang.reflect.Method.invokeNative(Native Method)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at java.lang.reflect.Method.invoke(Method.java:525)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-26 02:00:35.263: E/AndroidRuntime(1783):     at dalvik.system.NativeStart.main(Native Method)

下面是 ListActivity 类的代码:

 package dev.shaw.MyShoppingPlanner;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class List_Activity extends ListActivity {
String ListNames[];
boolean isNew = false;
String inputtext ="";
int stop = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ListNames = getListNames();
    String New[] = {"Create List"};
    if(ListNames[0].isEmpty()){
        ListNames[0] = "Create List";
        isNew = true;
        setListAdapter(new ArrayAdapter<String>(this, R.layout.singleitem , ListNames));
    }else{
    setListAdapter(new ArrayAdapter<String>(this, R.layout.singleitem , ListNames));

    }
}
@Override
protected void onListItemClick(ListView l, View v, int pos, long id) {
    // TODO Auto-generated method stub
    super.onListItemClick(l, v, pos, id);
    if(isNew == true){
        isNew = false;
        createNewList();
}else{
ShoppingList list = new ShoppingList(ListNames[pos], this);
try {
    setListAdapter(new ArrayAdapter<String>(this, R.layout.singleitem, list.toArray(list.getFile())));
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
}

}


private  void createNewList() {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Enter a Title:");

    // Set up the input
    final EditText input = new EditText(this);

    input.setInputType(InputType.TYPE_CLASS_TEXT);
    builder.setView(input);

    // Set up the buttons
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        @Override
        public void onClick(DialogInterface dialog, int which) {
            inputtext = input.getText().toString();
            ShoppingList list  = new ShoppingList(inputtext, List_Activity.this);


        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });

    builder.show();
    try {
        Thread.sleep(100);
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }





}
private String[] getListNames() {
    //generates the file containing the list names
    File file = new File(this.getFilesDir() +File.separator +"Lists"); 
    String names[] = new String[10];
    System.out.println(file.getAbsolutePath());
    if(file.isDirectory()){
        System.out.println("File is a directory");
    File lists[] = file.listFiles();

    if(lists!=null){
    for(int i = 0; i < lists.length; i ++){
        names[i] = lists[i].getName();
    }
    }else{
        names[0] = "Create New List";
    }
    }else{
        System.out.println("File is not a directory");
    }
    /*file.setReadable(true);
    file.setWritable(true);

    if(file.exists()){
        System.out.println("List file exists");

    }else{
        System.out.println("List file doesn't exists");
    }
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(file);
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    InputStreamReader is = new InputStreamReader(fis); 
    BufferedReader br = new BufferedReader(is);
    String line;
    String names[] = new String[100];
    int i = 1;
    try {
        while(true){
            line = br.readLine();
            if(line == null){
                break;
            }
            else{
            try{
            names[i] = line;
            }
            catch(NullPointerException e){
                e.printStackTrace();
            }
            i++;
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        br.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }*/

    return names;
}

}

这个 Activity 的xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context="dev.shaw.MyShoppingPlanner.List_Activity"
android:background="@drawable/lined_paper_blank"
tools:ignore="MergeRootFrame" >
    <Button
    android:id="@+id/button_createlist"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/create_list" />
   <Button
    android:id="@+id/button_deletelist"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/delete_list" />
</LinearLayout>

最佳答案

首先,您需要在Activity 中设置布局,通常在onCreate 方法中。我没有看到这个,添加:

// just after this line
super.onCreate(savedInstanceState);
setContentView(R.layout.list_activity_layout);

然后,我刚刚扩充了您的布局,您需要在该布局内创建您的 ListView,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context="dev.shaw.MyShoppingPlanner.List_Activity"
    android:background="@drawable/lined_paper_blank"
    tools:ignore="MergeRootFrame" >

    ...

    <ListView
        android:id="@android:id/list"
        android:layout_height="wrap_content"
        android:layout_width="match_parent">
    </ListView>

</LinearLayout>   

以上是您的 List_Activity 布局,名为 list_activity_layout。你可以在 Create Listview With ListActivity 上看到一个小例子.
希望对您有所帮助。

关于java - ArrayAdapter 空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22650220/

相关文章:

c# - 最新的 VS Mac 更新导致 Xamarin Android 中的 SetContentView(resourceid) 出现 SIGSEGV

python - 比较Python中的行元素

java - 如何使用 Java 获取 chromedriver 进程 PID?

java - Spring Reactive - 收集一系列分页结果作为所有结果的 Mono

android - 如何在 android strings.xml 中写入字符 &

c++ - 将以\r\n 分隔的字符串拆分为字符串数组 [C/C++]

php - 如何从php中的数组中找到平均值?

java - 使用ANTLR4获得完整的功能内容与C语言的空间

java - 无法在 Ajax 和 qTip2 中显示 HTML servlet 的响应

android - AccountManager.blockingGetAuthToken() 不提示输入凭据