2014-10-10 185 views
0

我有当即时试图从我的数据库 错误显示在列表视图数据的问题是“致命异常:主 java.lang.ArrayIndexOutOfBoundsException:长度= 4;索引= 4“ 。我不明白它是什么。致命异常:主java.lang.ArrayIndexOutOfBoundsException:

我希望有人能帮助我 感谢

这是我的代码

公共类FragmentMaintain扩展片段{

ListView list; 
TextView mid; 
TextView pid; 
TextView status; 
TextView description; 
TextView note; 
ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>(); 
//URL to get JSON Array 
private static String url = "http://10.0.2.2/skripsi/json/testing.php"; 

//JSON Node Names 
private static final String TAG_OS = "maintenance"; 
private static final String TAG_MID = "mid"; 
private static final String TAG_PID = "pid"; 
private static final String TAG_STATUS = "status"; 
private static final String TAG_DESCRIPTION = "description"; 
private static final String TAG_NOTE = "note"; 
JSONArray maintenance = null; 
Button Addnotedata; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    Log.d("ZZZ", "ada di oncreateView maintain"); 
    super.onCreate(savedInstanceState); 
    View rootView = inflater.inflate(R.layout.fragment_maintain, container, false); 

    new JSONParse().execute(); 
    return rootView; 


} 


private class JSONParse extends AsyncTask<String, String, JSONObject> { 
    private ProgressDialog pDialog; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     mid = (TextView) getActivity().findViewById(R.id.mid); 
     pid = (TextView) getActivity().findViewById(R.id.pid); 
     status = (TextView) getActivity().findViewById(R.id.status); 
     description = (TextView) getActivity().findViewById(R.id.description); 
     note = (TextView) getActivity().findViewById(R.id.note); 

     pDialog = new ProgressDialog(getActivity()); 
     pDialog.setMessage("Getting Data ..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 
    @Override 
    protected JSONObject doInBackground(String... args) { 
     //String pid = getArguments().getString("pid"); 
     //List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     //params.add(new BasicNameValuePair("pid", pid)); 
     JSONParser jParser = new JSONParser(); 
     JSONObject json = jParser.makeHttpRequestWithoutParams(url); 
     //Log.d("TES", pid+", "+ json.toString()); 
     return json; 
    } 
    @Override 
    protected void onPostExecute(JSONObject json) { 
     pDialog.dismiss(); 
     try { 
      // Getting JSON Array from URL 
      maintenance = json.getJSONArray(TAG_OS); 
      for(int i = 0; i < maintenance.length(); i++){ 
       JSONObject c = maintenance.getJSONObject(i); 
       // Storing JSON item in a Variable 
       String mid = c.getString(TAG_MID); 
       String pid = c.getString(TAG_PID); 
       String status = c.getString(TAG_STATUS); 
       String description = c.getString(TAG_DESCRIPTION); 
       String note = c.getString(TAG_NOTE); 
       // Adding value HashMap key => value 
       HashMap<String, String> map = new HashMap<String, String>(); 
       map.put(TAG_MID, mid); 
       map.put(TAG_PID, pid); 
       map.put(TAG_STATUS, status); 
       map.put(TAG_DESCRIPTION, description); 
       map.put(TAG_NOTE, note); 
       oslist.add(map); 
       list=(ListView) getActivity().findViewById(R.id.list); 
       ListAdapter adapter = new SimpleAdapter(getActivity(), oslist, 
         R.layout.list_maintain, 
         new String[] { TAG_MID,TAG_PID, TAG_STATUS, TAG_NOTE}, new int[] { 
         R.id.mid,R.id.pid, R.id.status, R.id.description, R.id.note}); 
       list.setAdapter(adapter); 
       list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, 
              int position, long id) { 
         Toast.makeText(getActivity(), "You Clicked at " + oslist.get(+position).get("pid"), Toast.LENGTH_SHORT).show(); 
        } 
       }); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

}

,这我的logcat

10-10 00:10:50.575 2004年至2004年/ com.example.blackcustomzier.skripsi E/AndroidRuntime:致命异常:主 java.lang.ArrayIndexOutOfBoundsException:长度= 4;在android.widget.SimpleAdapter.getView(SimpleAdapter.java:114)上的android.widget.SimpleAdapter.createViewFromResource(SimpleAdapter.java:126) 索引= 4 ) 在android.widget.AbsListView.obtainView(AbsListView.java:2177) 在android.widget.ListView.makeAndAddView(ListView.java:1840) 在android.widget.ListView.fillDown(ListView.java:675) at android.widget.ListView.fillFromTop(ListView.java:736) at android.widget.ListView.layoutChildren(ListView.java:1655) at android.widget.AbsListView.onLayout(AbsListView.java:2012) at android .view.View.layout(View.java:14289) at android.view.ViewGroup.layout(ViewGroup.java:4562) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) at android.view.View.Group.layout(ViewGroup.java:4562) 在android上。android.view.View.layout(View.java:14289) android.view.Lineout.onLayout(LinearLayout.java:1434) widget.FrameLayout.onLayout(FrameLayout.java:448) 在android.view.View.layout(View.java:14289)

+0

看看你的适配器实例。数据键和视图ID的数组大小不同。 – 2014-10-10 04:27:21

+0

什么是oslist.get中的+位置(+ position).get(“pid”); ?和你的字符串[]和int []不匹配 – 2014-10-10 04:27:27

+0

'FragmentMaintain' * *没有列在你的堆栈跟踪中。您需要发布导致问题的代码。 – jww 2014-10-10 04:33:16

回答

0

试试这个办法,希望这将帮助你解决你的问题。

ListAdapter adapter = new SimpleAdapter(getActivity(), oslist,R.layout.list_maintain,new String[] {TAG_MID,TAG_PID,TAG_STATUS,TAG_DESCRIPTION,TAG_NOTE}, new int[] { R.id.mid,R.id.pid, R.id.status, R.id.description, R.id.note}); 

你缺少在适配器中初始化字符串数组传递TAG_DESCRIPTION。

1

如果长度为4,最大指数应为3作为指数从开始0.

+1

这应该是评论。 – 2014-10-10 04:44:23

0

当您创建SimpleAdapter时,第4个和第5个参数需要具有相同的大小。

因此,第四个参数的字符串将被用作关键字来填充视图的值,该值是构造函数的第三个参数。

而且,将视图与键匹配的方式是在包含键和分别包含视图的ID的第4个和第5个参数中指定它们,以便在每个数组中具有相同的索引。

See this