首页 文章

致命异常:主java.lang.ArrayIndexOutOfBoundsException:

提问于
浏览
1

我有问题,当我试图在我的数据库的列表视图中显示数据时,错误是“ FATAL EXCEPTION: main java.lang.ArrayIndexOutOfBoundsException: length=4; index=4 ” . 我不明白它是什么 .

我希望有人能帮助我,谢谢

这是我的代码

public class FragmentMaintain扩展Fragment {ListView列表;
TextView mid;
TextView pid;
TextView状态;
TextView描述;
TextView笔记;
ArrayList <HashMap <String,String >> oslist = new ArrayList <HashMap <String,String >>();
//获取JSON数组的URL
private static String url =“http://10.0.2.2/skripsi/json/testing.php”;

// JSON节点名称
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;
按钮添加数据;

@覆盖
public View onCreateView(LayoutInflater inflater,ViewGroup容器,
Bundle savedInstanceState){
Log.d(“ZZZ”,“ada di oncreateView维护”);
super.onCreate(savedInstanceState);
查看rootView = inflater.inflate(R.layout.fragment_maintain,container,false);

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

}

私有类JSONParse扩展AsyncTask <String,String,JSONObject> {
私人ProgressDialog pDialog;
@覆盖
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(“获取数据......”);
pDialog.setIndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
}
@覆盖
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());
返回json;
}
@覆盖
protected void onPostExecute(JSONObject json){
pDialog.dismiss();
尝试{
//从URL获取JSON数组
maintenance = json.getJSONArray(TAG_OS);
for(int i = 0; i <maintenance.length(); i){
JSONObject c = maintenance.getJSONObject(i);
//在变量中存储JSON项
String mid = c.getString(TAG_MID);
String pid = c.getString(TAG_PID);
字符串状态= c.getString(TAG_STATUS);
字符串描述= c.getString(TAG_DESCRIPTION);
String note = c.getString(TAG_NOTE);
//添加值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,注意);
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(适配器);
list.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@覆盖
public void onItemClick(AdapterView <?> parent,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:FATAL EXCEPTION:main java.lang.ArrayIndexOutOfBoundsException:length = 4;在android.widget.SimpleAdapter.bindView(SimpleAdapter.java:160)的android.widget.SimpleAdapter.createViewFromResource(SimpleAdapter.java:126)android.widget.SimpleAdapter.getView(SimpleAdapter.java:114)android下的index = 4 .widget.AbsListView.obtainView(AbsListView.java:2177)位于android.widget.List上的android.widget.ListView.makeAndAddView(ListView.java:1840),位于android.widget.ListView的android.widget.ListView.fillDown(ListView.java:675) . android.widget.Ab上的android.widget.AbsListView.onLayout(AbsListView.java:2012)的android.widget.ListView.layoutChildren(ListView.java:1655)中的fillFromTop(ListView.java:736)(View.java) :14289)在Android.widget.LineoutLayout上android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)的android.view.Linout.setoutVertical(LinearLayout.java:1525)的android.view.ViewGroup.layout(ViewGroup.java:4562) .onLayout(LinearLayout.java:1434)位于android.view.Viewout.Loutout(FrameLayout)的android.view.View.layout(ViewGroup.java:4562)上的android.view.View.layout(View.java:14289) . java:448)在android.view.View.layout(View.java:14289)

3 回答

  • 0

    Try this way,hope this will help you to solve your problem.

    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});
    

    在适配器初始化时,您缺少在String Array中传递TAG_DESCRIPTION .

  • 0

    如果长度为4,则索引从0开始,max index应为3 .

  • 1

    创建SimpleAdapter时,第4和第5个参数需要大小相同 .

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

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

    See this

相关问题