2014-02-26 16 views
0

由於我是Android的新手,我無法弄清楚爲什麼ListView不會從ArrayList中獲取值,從而顯示NullPointerException。在列表視圖中的java.lang.NullPointerException

我正在嘗試使用自定義對話框在TextView單擊中的json鏈接中查看ListView中的東西。

的logcat:

02-26 05:42:22.905: E/AndroidRuntime(1441): FATAL EXCEPTION: main 
02-26 05:42:22.905: E/AndroidRuntime(1441): java.lang.NullPointerException 
02-26 05:42:22.905: E/AndroidRuntime(1441):  at com.example.customalertdialoglistview.MainActivity$1.onClick(MainActivity.java:106) 
02-26 05:42:22.905: E/AndroidRuntime(1441):  at android.view.View.performClick(View.java:4204) 
02-26 05:42:22.905: E/AndroidRuntime(1441):  at android.view.View$PerformClick.run(View.java:17355) 
02-26 05:42:22.905: E/AndroidRuntime(1441):  at android.os.Handler.handleCallback(Handler.java:725) 
02-26 05:42:22.905: E/AndroidRuntime(1441):  at android.os.Handler.dispatchMessage(Handler.java:92) 
02-26 05:42:22.905: E/AndroidRuntime(1441):  at android.os.Looper.loop(Looper.java:137) 
02-26 05:42:22.905: E/AndroidRuntime(1441):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
02-26 05:42:22.905: E/AndroidRuntime(1441):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-26 05:42:22.905: E/AndroidRuntime(1441):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-26 05:42:22.905: E/AndroidRuntime(1441):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-26 05:42:22.905: E/AndroidRuntime(1441):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-26 05:42:22.905: E/AndroidRuntime(1441):  at dalvik.system.NativeStart.main(Native Method) 

MainActivity:

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    vehino = (TextView) findViewById(R.id.textView1); 

    // add button listener 
    vehino.setOnClickListener(new OnClickListener() { 



     @TargetApi(Build.VERSION_CODES.GINGERBREAD) 
     @Override 
     public void onClick(View arg0) { 

      // custom dialog 
      final Dialog dialog = new Dialog(context); 
      dialog.setContentView(R.layout.custom); 
      dialog.setTitle("Select Id..."); 
      ThreadPolicy tp = ThreadPolicy.LAX; 
      StrictMode.setThreadPolicy(tp); 
      JSONParser jParser = new JSONParser(); 


      ArrayList<HashMap<String,String>> state_cons=new ArrayList<HashMap<String,String>>(); 

      try { 
       json2=JSONfunctions 
         .getJSONfromURL("http://192.168.1.63/inba/mtc/mtc_enduser/vehicle_id_pop.php"); 
       jsonarray = json2.getJSONArray("vehicle"); 

       // looping through All Contacts 
       for (int i=0;i<jsonarray.length();i++){ 
        JSONObject c=jsonarray.getJSONObject(i); 

        HashMap<String,String> valuePairs=new HashMap<String,String>(); 

        valuePairs.put("vehicle_id",c.getString(TAG_id)); 
        valuePairs.put("vehicle_no", c.getString(TAG_no)); 
        String state1 = c.getString(TAG_id); 
        String state2 = c.getString(TAG_no); 
        Log.d("states",state1 + state2); 
        state_cons.add(valuePairs); 
        state_cons.addAll(state_cons); 

        shippingid=state1; 
        cids=state2; 

        listview = (ListView) findViewById(R.id.listView1); 

        adapter = new ListViewAdapter(MainActivity.this, arraylist); 

        listview.setAdapter(adapter); 
       } 

       // set the custom dialog components - text, image and button 
       dialog.show(); 

      }catch(JSONException e){ 
       e.printStackTrace(); 
      } 
     } 

     });}} 

ListViewAdapter類:

public class ListViewAdapter extends BaseAdapter { 

Context context; 
LayoutInflater inflater; 
ArrayList<HashMap<String, String>> data; 

HashMap<String, String> resultp = new HashMap<String, String>(); 

public ListViewAdapter(Context context, 
     ArrayList<HashMap<String, String>> arraylist) { 
    this.context = context; 
    data = arraylist; 

} 

@Override 
public int getCount() { 
    return data.size(); 

} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    TextView vehicle_id; 
    TextView vehicle_no; 

    View v = convertView; 

    if (v == null) { 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = inflater.inflate(R.layout.listview_item, null); 
    } 

    /*inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE);*/ 

    /*View itemView = inflater.inflate(R.layout.listview_item, parent, false);*/ 

    resultp = data.get(position); 

    vehicle_id = (TextView) v.findViewById(R.id.vid); 
    Log.d("vehicle_id", "name" + vehicle_id); 
    vehicle_no = (TextView) v.findViewById(R.id.vno); 
    Log.d("vehicle_no", "name" + vehicle_no); 

    vehicle_id.setText(resultp.get(MainActivity.TAG_id)); 
    vehicle_no.setText(resultp.get(MainActivity.TAG_no)); 

    v.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      resultp = data.get(position); 

      /* 
      * intent.putExtra("name", resultp.get(Update.NAME)); 
      * intent.putExtra("age", resultp.get(Update.AGE)); 
      * 
      * 
      * context.startActivity(intent); 
      */ 

     } 

    }); 
    return v; 
}} 

謝謝。

+0

什麼是行號106在'MainActivity.java'中 – InnocentKiller

+0

listview.setAdapter(adapter); – MetaldroiD

+0

@DeathMetalRules post'activity_main.xml' – Raghunandan

回答

0
adapter = new ListViewAdapter(MainActivity.this, arraylist); 

需要分配 「的ArrayList」,如果被聲明爲一個變量,它是空的

0
adapter = new ListViewAdapter(MainActivity.this, arraylist); 

我想ArrayList的值是空.....

0

我看你可能在主線程上運行網絡相關的操作,這是不可能的。

您應該使用ThreadAsyncTask來實現此目的。

該部分必須在後臺線程

json2=JSONfunctions.getJSONfromURL("http://192.168.1.63/inba/mtc/mtc_enduser/vehicle_id_pop.php"); 

如果你說行106 listview.setAdapter(adapter);列表視圖爲空。檢查是否有列表視圖與listView1activity_main.xml

+0

ID爲'listview1'的'ListView'不在'activity_main.xml'中,而是在'MainActivity'類中的'custom.xml'中。 – MetaldroiD

+1

@DeathMetalRules然後你不能初始化它在你的'MainActivtiy.java'中,'findViewById'在當前充氣佈局中查找帶有id的視圖。因此'NullPointerException'。 – Raghunandan