-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 の開始時、oncreate メソッドの前にある「String[] name_venues」変数にあります。

ログキャット:

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] が String 配列であり、String name_venues[]; として宣言した場合、リスト パラメータ オブジェクトを直接割り当てることができます。次に、そのインデックスを使用しようとすると null 例外が発生するため、for の前に次のステートメントを追加します。

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

例外の考えられる原因を特定するのに十分なコードが含まれていないか、提供されているデバッグ情報がありません。1 つの可能性は、listVenuesリストが null であるか、その要素の 1 つが null であるということです。

getListCategories().size()がゼロの場合listVenuesvenlist.txtsetArray_name_venuesログ ファイルに書き込む for ループはリストにアクセスしないため、呼び出しまで null ポインターについてはわかりません。

そのvenlist.txtファイルはもしかして空ですか?

それ以外の場合は、コードにさらにログを追加してください。少なくとも、ヌルがどこから来ているのかが正確に明らかになるはずです。それがわかれば、それを修正する方法を理解するのが簡単になります。

于 2013-05-30T11:45:30.850 に答える