2013-07-12 30 views
1

我正在創建一個listviewcheckbox的項目列表。我想通過檢查選項到下一個activity將複選框數據傳遞到下一個活動

爲此,我使用字符串數組將結果傳遞到other activity。一切都很順利,但當我點擊按鈕將數據傳遞到下一個活動時,應用程序將暫停,出現logcat錯誤NullPointerException。這可能是一個非常簡單的概念,但我不知道它,因爲我是Android的新手。

任何幫助,將不勝感激..

Java文件..

package com.example.travelplanner; 

import java.util.ArrayList; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.util.Log; 
import android.util.SparseBooleanArray; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 

public class TailoredtwoActivity extends Activity implements OnItemClickListener, OnClickListener{ 

    String[] builder; 
    Button btn1; 
    ListView mListView; 
    String[] array = new String[] {"Ham", "Turkey", "Bread"}; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_tailoredtwo); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, array); 

     mListView = (ListView) findViewById(R.id.listViewcity); 
     mListView.setAdapter(adapter); 
     mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 

     Button button = (Button) findViewById(R.id.btn_tailortwo_submit); 
     button.setOnClickListener(this); 
    } 

    public void onClick(View view) { 
     SparseBooleanArray positions = mListView.getCheckedItemPositions(); 
     for(int index = 0; index < array.length; index++) { 
      if(positions.get(index)==true) 
      { 
       builder[index] = array[index]; 
      } 
     } 
     Intent i1 = new Intent(this, TailoredthreeActivity.class); 
     Bundle b = new Bundle(); 
     b.putStringArray("city", builder); 
     i1.putExtras(b); 
     startActivity(i1); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     // TODO Auto-generated method stub 

    } 
} 

這是logcat的:

07-12 10:48:49.686: E/AndroidRuntime(13047): FATAL EXCEPTION: main 
07-12 10:48:49.686: E/AndroidRuntime(13047): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.travelplanner/com.example.travelplanner.TailoredthreeActivity}: java.lang.NullPointerException 
07-12 10:48:49.686: E/AndroidRuntime(13047): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967) 
07-12 10:48:49.686: E/AndroidRuntime(13047): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) 
07-12 10:48:49.686: E/AndroidRuntime(13047): at android.app.ActivityThread.access$600(ActivityThread.java:127) 
07-12 10:48:49.686: E/AndroidRuntime(13047): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) 
07-12 10:48:49.686: E/AndroidRuntime(13047): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-12 10:48:49.686: E/AndroidRuntime(13047): at android.os.Looper.loop(Looper.java:137) 
07-12 10:48:49.686: E/AndroidRuntime(13047): at android.app.ActivityThread.main(ActivityThread.java:4448) 
07-12 10:48:49.686: E/AndroidRuntime(13047): at java.lang.reflect.Method.invokeNative(Native Method) 
07-12 10:48:49.686: E/AndroidRuntime(13047): at java.lang.reflect.Method.invoke(Method.java:511) 
07-12 10:48:49.686: E/AndroidRuntime(13047): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823) 
07-12 10:48:49.686: E/AndroidRuntime(13047): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590) 
07-12 10:48:49.686: E/AndroidRuntime(13047): at dalvik.system.NativeStart.main(Native Method) 
07-12 10:48:49.686: E/AndroidRuntime(13047): Caused by: java.lang.NullPointerException 
07-12 10:48:49.686: E/AndroidRuntime(13047): at com.example.travelplanner.TailoredthreeActivity.onCreate(TailoredthreeActivity.java:59) 
07-12 10:48:49.686: E/AndroidRuntime(13047): at android.app.Activity.performCreate(Activity.java:4465) 
07-12 10:48:49.686: E/AndroidRuntime(13047): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
07-12 10:48:49.686: E/AndroidRuntime(13047): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931) 
07-12 10:48:49.686: E/AndroidRuntime(13047): ... 11 more 
+0

請加onCreate方法TailoredthreeActivity的,becouse會有問題 – koso

+0

我想你忘記初始化構建器數組 –

+0

哪一行是 - 59表示TailoredthreeActivity –

回答

0

我會建議你使用一個數組列表中添加所選項目和將陣列列表傳遞給第二個活動

checked = new ArrayList<String>(); 
    public void onClick(View view) { 
     SparseBooleanArray positions = mListView.getCheckedItemPositions(); 
     for(int index = 0; index < array.length; index++) { 
      if(positions.get(index)==true) 
      { 
       checked.add(array[index]); 
      } 
     } 
     Intent i1 = new Intent(MainActivity.this, TailoredthreeActivity.class); 
      i1.putStringArrayListExtra("list",checked); 
     startActivity(i1); 
    } 

要接收

ArrayList<String> getChecked; 
Bundle extras = getIntent().getExtras(); 
    if(extras!=null) 
    { 
     getChecked = extras.getStringArrayList("list"); 

    } 
0

您需要首先初始化數組,因爲每個數組是在Java對象

public void onClick(View view) { 
     SparseBooleanArray positions = mListView.getCheckedItemPositions(); 
     builder= new String[array.length]; 
     for(int index = 0; index < array.length; index++) { 
      if(positions.get(index)==true) 
      { 
       builder[index] = array[index]; 
      } 
     } 
相關問題