-1

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

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 方法之前。

日志猫:

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)
4

3 回答 3

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();
    }
}
于 2013-05-30T11:08:18.433 回答
1

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

name_venues=new String[list.size()];
于 2013-05-30T11:08:45.190 回答
0

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

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

那个venlist.txt文件是空的吗?

否则,请在您的代码中添加更多日志记录。至少应该清楚地知道 null 的来源。一旦你知道了这一点,就会更容易弄清楚如何解决它。

于 2013-05-30T11:45:30.850 回答