为什么我在这里得到一个空的例外?

时间:2013-05-30 10:54:13

标签: android string nullpointerexception

我正在尝试在下一个代码中填充一个数组字符串。

public void setArray_name_venues(List<Venue> list) {
        // storing string resources into Array
        for(int i = 0; i < list.size(); i++){
            this.name_venues[i] = "" + list.get(i).getName();
        }
    }

我使用的是Asynhttp客户端,我将此方法称为onFinish方法。

public void getVenues() {

        AsyncHttpClient client = new AsyncHttpClient();
        client.get(getQueryVenues4SQ(), null, new JsonHttpResponseHandler() {

            @Override
            public void onFinish() {
                // TODO Auto-generated method stub
                //super.onFinish();

                File log2 = new File(Environment.getExternalStorageDirectory(),"venlist.txt");

                try {
                    BufferedWriter out = new BufferedWriter(new FileWriter(log2.getAbsolutePath(),false));
                    for(int i = 0; i < getListCategories().size(); i++){
                        out.write(listVenues.get(i).toString());
                    }
                    out.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                runOnUiThread(new Runnable() {
                    public void run() {
                        setArray_name_venues(listVenues);
                        Log.i("ArrayVenues", getArray_name_venues().toString());
                        // Binding resources Array to ListAdapter
                        customListView.setAdapter(new ArrayAdapter<String>(MainActivity.this, R.layout.list_venues, name_venues));

                    }
                });

                runOnUiThread(new Runnable() {
                    public void run() {
                        makeToast("Nightclubs cargados", 1);
                    }
                });
            }

在setArray_name_venues(listVenues)中失败。

感谢您的帮助

编辑:

“name_venues”位于公共类MainActivity开头的“String [] name_venues”变量上,位于oncreate方法之前。

logcat的:

05-30 14:24:14.645: W/dalvikvm(21040): threadid=1: thread exiting with uncaught exception (group=0x410652a0)
05-30 14:24:14.645: E/AndroidRuntime(21040): FATAL EXCEPTION: main
05-30 14:24:14.645: E/AndroidRuntime(21040): java.lang.NullPointerException
05-30 14:24:14.645: E/AndroidRuntime(21040):    at victor.martin.loc4sq.MainActivity.setArray_name_venues(MainActivity.java:100)
05-30 14:24:14.645: E/AndroidRuntime(21040):    at victor.martin.loc4sq.MainActivity$2$1.run(MainActivity.java:271)
05-30 14:24:14.645: E/AndroidRuntime(21040):    at android.app.Activity.runOnUiThread(Activity.java)
05-30 14:24:14.645: E/AndroidRuntime(21040):    at victor.martin.loc4sq.MainActivity$2.onFinish(MainActivity.java:269)
05-30 14:24:14.645: E/AndroidRuntime(21040):    at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(AsyncHttpResponseHandler.java:194)
05-30 14:24:14.645: E/AndroidRuntime(21040):    at com.loopj.android.http.JsonHttpResponseHandler.handleMessage(JsonHttpResponseHandler.java:123)
05-30 14:24:14.645: E/AndroidRuntime(21040):    at com.loopj.android.http.AsyncHttpResponseHandler$1.handleMessage(AsyncHttpResponseHandler.java:84)
05-30 14:24:14.645: E/AndroidRuntime(21040):    at android.os.Handler.dispatchMessage(Handler.java)
05-30 14:24:14.645: E/AndroidRuntime(21040):    at android.os.Looper.loop(Looper.java)
05-30 14:24:14.645: E/AndroidRuntime(21040):    at android.app.ActivityThread.main(ActivityThread.java)
05-30 14:24:14.645: E/AndroidRuntime(21040):    at java.lang.reflect.Method.invokeNative(Native Method)
05-30 14:24:14.645: E/AndroidRuntime(21040):    at java.lang.reflect.Method.invoke(Method.java)
05-30 14:24:14.645: E/AndroidRuntime(21040):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
05-30 14:24:14.645: E/AndroidRuntime(21040):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
05-30 14:24:14.645: E/AndroidRuntime(21040):    at dalvik.system.NativeStart.main(Native Method)

3 个答案:

答案 0 :(得分:1)

public void setArray_name_venues(List<Venue> list) {
    name_venues = new String[list.size()];
    // storing string resources into Array
    for(int i = 0; i < list.size(); i++){
        this.name_venues[i] = "" + list.get(i).getName();
    }
}

答案 1 :(得分:1)

如果name_venues [i]是一个列表,那么它的使用方法是错误的,如果name_venues [i]是String数组并且你刚刚将它声明为String name_venues [],则可以直接为它分配list参数对象;当你尝试使用它的索引时它会给你null异常,所以在for之前添加以下语句。

name_venues=new String[list.size()];

答案 2 :(得分:0)

没有足够的代码或调试信息来确定异常的可能原因。一种可能性是您的listVenues列表为空或其中一个元素为空。

如果getListCategories().size()为零,那么将我们的listVenues写入 venlist.txt 日志文件的for循环将永远不会访问该列表,因此您不会知道在setArray_name_venues调用之前的空指针。

venlist.txt 文件是否空了?

否则,请在代码中添加更多日志记录。至少应该明确地显示null的来源。一旦你知道了,就会更容易弄清楚如何修复它。