我正在使用截取从phpmysql数据库获取数据。现在,每当我单击按钮显示对话框时,我的应用程序都会因以下错误而崩溃:
我得到的错误
问题是什么?
这是我的代码:
public class SetTask extends Fragment {
ListView lv_task_chooser;
ArrayList<SetTaskModel> setTaskModelArrayList;
private SetTaskAdapter setTaskAdapter;
ArrayAdapter<String> scAdapter;
String url, category;
RequestQueue queue_fetch, queue_fetch1;
ConnectivityManager connMgr;
NetworkInfo networkInfo;
Context ctx;
int cat_id;
LinearLayout taskLayout;
private String[] array;
private int[] sub_cat_id;
JSONArray jsonArray, jsonArray1;
public SetTask() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_set_task, container, false);
ctx = getContext();
lv_task_chooser = (ListView)rootView.findViewById(R.id.lv_task_chooser);
taskLayout = (LinearLayout)rootView.findViewById(R.id.taskLayout);
queue_fetch = Volley.newRequestQueue(ctx);
queue_fetch1 = Volley.newRequestQueue(ctx);
setTaskModelArrayList = new ArrayList<>();
fetchDB();
Log.i("pointafterfetch", "reached");
Log.i("numberofarrayentries", String.valueOf(setTaskModelArrayList.size()));
for (int i = 0; i < setTaskModelArrayList.size(); i++){
Log.i("arrayentriesfetch", setTaskModelArrayList.get(i).toString());
}
//setTaskAdapter = new SetTaskAdapter(setTaskModelArrayList, ctx);
//lv_task_chooser.setAdapter(setTaskAdapter);
/*lv_task_chooser.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
populateSpinner(position);
}
});*/
return rootView;
}
private void fetchDB(){
url = "http://nmstech.in/coach/categorys.php";
connMgr = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
networkInfo = connMgr.getActiveNetworkInfo();
if (!(networkInfo != null && networkInfo.isConnected())) {
final AlertDialog.Builder builder1 = new AlertDialog.Builder(ctx);
builder1.setTitle(getString(R.string.network_no_t));
builder1.setMessage(getString(R.string.network_no_m));
builder1.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder1.create().show();
}
else{
StringRequest strreq_fetch = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String Response) {
try {
jsonArray = new JSONArray(Response);
for(int i = 0; i < jsonArray.length(); i++){
setTaskModelArrayList.add(new SetTaskModel(jsonArray.getJSONObject(i)
.getString("cat_name")));
Log.i("arraylistentries", setTaskModelArrayList.get(i).getCategory());
Log.i("noentries", String.valueOf(setTaskModelArrayList.size()));
setTaskAdapter = new SetTaskAdapter(setTaskModelArrayList, ctx);
lv_task_chooser.setAdapter(setTaskAdapter);
setTaskAdapter.notifyDataSetChanged();
lv_task_chooser.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
populateSpinner(position);
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError e) {
e.printStackTrace();
}
});
Log.i("pointnotesfetch", "reached");
queue_fetch.add(strreq_fetch);
}
}
private void populateSpinner(final int position){
url = "http://nmstech.in/coach/categorys.php";
connMgr = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
networkInfo = connMgr.getActiveNetworkInfo();
if (!(networkInfo != null && networkInfo.isConnected())) {
final AlertDialog.Builder builder1 = new AlertDialog.Builder(ctx);
builder1.setTitle(getString(R.string.network_no_t));
builder1.setMessage(getString(R.string.network_no_m));
builder1.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder1.create().show();
}
else {
Log.i("spinpop", "reached");
StringRequest strreq_fetch1 = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String Response) {
try {
cat_id = (int) lv_task_chooser.getItemIdAtPosition(position);
jsonArray1 = new JSONArray(Response);
final AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
builder.setTitle("Subtopics");
connMgr = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
networkInfo = connMgr.getActiveNetworkInfo();
category = jsonArray1.getJSONObject(cat_id).getString("cat_name");
int k = 0;
try {
for (int i = 0; i < jsonArray1.getJSONObject(position).getJSONArray("sub_cat").length(); i++){
array = new String[jsonArray1.getJSONObject(position).getJSONArray("sub_cat").length()];
sub_cat_id = new int[jsonArray1.getJSONObject(position).getJSONArray("sub_cat").length()];
array[i] = jsonArray1.getJSONObject(position).getJSONArray("sub_cat").getJSONObject(i).getString("sub_cat_name");
sub_cat_id[k++] = jsonArray1.getJSONObject(position).getJSONArray("sub_cat").getJSONObject(i).getInt("sub_cat_id");
Log.i("sub_cat_id", String.valueOf(sub_cat_id[k-1]));
Log.i("sub_cat", array[i]);
}
scAdapter = new ArrayAdapter<String>(ctx, android.R.layout.simple_spinner_dropdown_item, array);
}
catch (Exception e){
e.printStackTrace();
}
builder.setItems(array, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
Bundle cat_args = new Bundle();
cat_args.putInt("sub_cat_id", sub_cat_id[which]);
cat_args.putString("sub_cat", array[which]);
Fragment fragment = new Exercise();
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragment.setArguments(cat_args);
fragmentTransaction.replace(R.id.mainFrame, fragment);
fragmentTransaction.commit();
}
});
builder.show();
} catch (Exception e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError e) {
e.printStackTrace();
}
});
Log.i("pointnotesfetch", "reached");
queue_fetch1.add(strreq_fetch1);
}
}
}
编辑:添加完整stacktrace
06-29 10:38:25.499 9183-9183/网管系统。实例com。coach E/AndroidRuntime:致命异常:主进程:nmss。实例com。coach,PID:9183 java。lang.NullPointerException:尝试调用虚拟方法“java”。lang.字符串java。lang.Object。android上的空对象引用上的toString()。小部件。阵列适配器。在android上创建ViewFromResource(ArrayAdapter.java:409)。小部件。阵列适配器。android上的getView(ArrayAdapter.java:371)。小部件。AbsListView。android上的获取视图(AbsListView.java:2367)。小部件。ListView。android上的measureHeightOfChildren(ListView.java:1326)。小部件。ListView。android上的onMeasure(ListView.java:1233)。看法看法在android上测量(View.java:19756)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:6124)。小部件。框架布局。android上的onMeasure(FrameLayout.java:185)。看法看法在android上测量(View.java:19756)。支持v7.widget。AlertDialogLayout。android上的tryOnMeasure(AlertDialogLayout.java:135)。支持v7.widget。AlertDialogLayout。android上的onMeasure(AlertDialogLayout.java:63)。看法看法在android上测量(View.java:19756)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:6124)。小部件。框架布局。android上的onMeasure(FrameLayout.java:185)。支持v7.widget。ContentFrameLayout。android上的onMeasure(ContentFrameLayout.java:139)。看法看法在android上测量(View.java:19756)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:6124)。小部件。框架布局。android上的onMeasure(FrameLayout.java:185)。看法看法在android上测量(View.java:19756)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:6124)。小部件。框架布局。android上的onMeasure(FrameLayout.java:185)。看法看法在android上测量(View.java:19756)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:6124)。小部件。线性布局。android上的measureChildBeforeLayout(LinearLayout.java:1464)。小部件。线性布局。android上的measureVertical(LinearLayout.java:758)。小部件。线性布局。android上的onMeasure(LinearLayout.java:640)。看法看法在android上测量(View.java:19756)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:6124)。小部件。框架布局。com上的onMeasure(FrameLayout.java:185)。Android内部的政策DecorView。android上的onMeasure(DecorView.java:687)。看法看法在android上测量(View.java:19756)。看法ViewRootImpl。android上的performMeasure(ViewRootImpl.java:2283)。看法ViewRootImpl。android上的measureHierarchy(ViewRootImpl.java:1343)。看法ViewRootImpl。在android上执行Traversals(ViewRootImpl.java:1619)。看法ViewRootImpl。android上的doTraversal(ViewRootImpl.java:1258)。看法ViewRootImpl$TraversalRunnable。在android上运行(ViewRootImpl.java:6348)。看法Choreographer$CallbackRecord。在android上运行(Choreographer.java:871)。看法编舞android上的doCallbacks(Choreographer.java:683)。看法编舞android上的doFrame(Choreographer.java:619)。看法Choreographer$FrameDisplayEventReceiver。在android上运行(Choreographer.java:857)。操作系统。处理程序。android上的handleCallback(Handler.java:751)。操作系统。处理程序。android上的dispatchMessage(Handler.java:95)。操作系统。活套。android上的loop(Looper.java:154)。应用程序。ActivityThread。java上的main(ActivityThread.java:6123)。lang.reflect。方法在com上调用(本机方法)。Android内部的操作系统。ZygoteInit$MethodandArgscaler。在com上运行(ZygoteInit.java:867)。Android内部的操作系统。合子岩。main(ZygoteInit.java:757)
编辑2:
添加SetTaskAdapter类的代码
public class SetTaskAdapter extends ArrayAdapter<SetTaskModel>{
private ArrayList<SetTaskModel> data;
Context mContext;
private static class ViewHolder{
Button btn_category;
}
public SetTaskAdapter(ArrayList<SetTaskModel> data, Context mContext){
super(mContext, R.layout.lv_task_chooser, data);
this.data = data;
this.mContext = mContext;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
SetTaskModel setTaskModel = getItem(position);
ViewHolder viewHolder;
final View result;
if(convertView == null){
viewHolder = new ViewHolder();
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
convertView = layoutInflater.inflate(R.layout.lv_task_chooser, parent, false);
viewHolder.btn_category = (Button)convertView.findViewById(R.id.btn_category);
result = convertView;
convertView.setTag(viewHolder);
}
else{
viewHolder = (ViewHolder)convertView.getTag();
result = convertView;
}
viewHolder.btn_category.setText(setTaskModel.getCategory());
return convertView;
}
}
尝试以下代码,在for循环的外侧初始化字符串数组和int数组。
示例:
array = new String[jsonArray1.getJSONObject(position).getJSONArray("sub_cat").length()];
sub_cat_id = new int[jsonArray1.getJSONObject(position).getJSONArray("sub_cat").length()];
try {
for (int i = 0; i < jsonArray1.getJSONObject(position).getJSONArray("sub_cat").length(); i++){
array[i] = jsonArray1.getJSONObject(position).getJSONArray("sub_cat").getJSONObject(i).getString("sub_cat_name");
sub_cat_id[k++] = jsonArray1.getJSONObject(position).getJSONArray("sub_cat").getJSONObject(i).getInt("sub_cat_id");
Log.i("sub_cat_id", String.valueOf(sub_cat_id[k-1]));
Log.i("sub_cat", array[i]);
}
scAdapter = new ArrayAdapter<String>(ctx, android.R.layout.simple_spinner_dropdown_item, array);
}
catch (Exception e){
e.printStackTrace();
}
问题内容: 我对Flask框架相当陌生,并且正在为Webportal创建编辑配置文件页面。我被困在某个位置,无法自动填写表格。 这是我的表格课: 这是我评估表格的功能。 而我的html表单模板是: 我有一个用户类的对象。然后我要从该对象中预填此表单。如何预填充表单中的值。我正在尝试在此处实现编辑配置文件功能。 问题答案: 创建对象时,需要将其传递给表单。 你将遇到一些麻烦 它创建EditProfi
拦截对话框 bp DialogBox 创建模态对话框 bp DialogBoxParam(A) 创建模态对话框 bp DialogBoxIndirect 创建模态对话框 bp DialogBoxIndirectParam(A) 创建模态对话框 bp CreateDialog 创建非模态对话框 bp CreateDialogParam(A) 创建非模态对话框 bp CreateDialogIndir
问题内容: 创建给定大小的零填充熊猫数据框的最佳方法是什么? 我用过了: 有更好的方法吗? 问题答案: 您可以尝试以下方法:
我在NetBeans IDE中工作,语言是Java,主要的类是JFrame Form。 我需要从Jtable获取所有数据并用这些数据填充数组。数组代表矩阵。 代码如下 我有一个错误 线程“AWT-EventQueue-0”java.lang.ClassCastException:java.lang.String无法转换为java.lang.Double 所以将表中的元素设置为双精度不是那么容易吗?
说到编程或java,我只是一个完全的初学者。所以一开始,我的计划是使用JavaFX(结合场景构建器)创建一个窗口,在那里我有一个按钮,可以引导我进入另一个窗口,在那里我有一个组合框。我谷歌了几个小时,想找到一种方法来填充组合框,但我找到的所有解决方案都不适合我。这就是为什么我认为我在这里犯了一些错误,我希望你能以某种方式帮助我。或者在列表中给我一个提示,我应该学习/阅读什么才能自己找到解决方案。首
我想在一个组合框中填充一些数据。这很好。但是,我想动态地改变组合框中的数据。 目前我有一个表,在组合框中,我在表列中显示数据的唯一值。现在,表数据存储在静态可观察列表变量中。我想根据表中显示的数据更改组合框中的数据。也就是说,如果存储表数据的静态可观察列表发生更改,我希望在没有手动干预的情况下更改组合框数据。 如果没有单独的静态变量用于组合框,这是否可能?