Android 可扩展listview notifydatasetchanged()在asynchtask中不工作
我的活动由一个可展开的列表视图和两个按钮以及底部的文本视图组成,如下图所示 加载页面时,将根据TextView中的日期填充listview。它工作得很好。当我单击下一个或上一个按钮时,它应该根据下一个或上一个日期更新listview,但我不知道在哪里调用notifydatasetchanged或如何调用。我在页面创建和以日期作为参数的按钮单击上调用相同的AsynchTask。当我点击任何按钮时,应用程序崩溃。我看到了其他类似的话题,但找不到解决方案。任何帮助都将不胜感激 问候Android 可扩展listview notifydatasetchanged()在asynchtask中不工作,android,Android,我的活动由一个可展开的列表视图和两个按钮以及底部的文本视图组成,如下图所示 加载页面时,将根据TextView中的日期填充listview。它工作得很好。当我单击下一个或上一个按钮时,它应该根据下一个或上一个日期更新listview,但我不知道在哪里调用notifydatasetchanged或如何调用。我在页面创建和以日期作为参数的按钮单击上调用相同的AsynchTask。当我点击任何按钮时,应用程序崩溃。我看到了其他类似的话题,但找不到解决方案。任何帮助都将不胜感激 问候 public c
public class GetPatientVitalsTask extends AsyncTask<String, String, String> {
public VitalListActivity vitalsActivity;
private Activity activity;
private Context context;
private View rootView;
private GogchProgressDialog progressDialog;
public GetPatientVitalsTask(VitalListActivity activity, View rootView){
super();
this.activity = activity;
this.rootView = rootView;
this.context = this.activity.getApplicationContext();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new GogchProgressDialog(activity, R.drawable.gogch_progress_spinner);
progressDialog.show();
}
@Override
protected String doInBackground(String... params) {
String sDate = params[0];
String message = null;
String url = "http://test.gogch.com/gch-restful/vitals/calender?date=" + sDate;
HttpClient httpClient = ServiceHelper.getHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost(url);
try {
HttpResponse response = httpClient.execute(httpPost);
int statusCode = response.getStatusLine().getStatusCode();
message = EntityUtils.toString(response.getEntity());
Log.d("Http Post Response:", message);
}
catch(ClientProtocolException e){
e.printStackTrace();
}
catch (IOException e){
e.printStackTrace();
}
return message;
}
protected void onPostExecute(String responseText) {
ExpandableListView expListView = (ExpandableListView) rootView.findViewById(R.id.vitalsListView);
final List<Vitals> vitalsList = VitalService.buildVitalsList(responseText);
VitalListAdapter vitalAdapter = null;
vitalAdapter = new VitalListAdapter(activity, vitalsList);
expListView.setAdapter(vitalAdapter);
vitalAdapter.notifyDataSetChanged();
progressDialog.dismiss();
}
}
用于在活动中声明: 最终ExpandableListView expListView=(ExpandableListView)rootView.findViewById(R.id.vitalListView)
并使用Asynctask中的expListView设置适配器检查expListView…抱歉。我不明白,检查解释视图了解什么?你能解释一下吗?检查这个R.id.vitalListView是否是可扩展ListView的正确id它是正确的。在我的问题中我确实提到过,listview在页面加载时第一次被填充,只有在点击按钮时应用程序才会崩溃谢谢,它可以工作。但我们不需要将其声明为final,声明为final会使我的应用程序崩溃,并给出错误“java.lang.RuntimeException:无法实例化活动组件信息{com.cinch.gogch/com.cinch.gogch.activities.VitalListActivity}:java.lang.NullPointerException:尝试调用虚拟方法'android.view.view.android.view.Window.findViewById'(int)“在空对象引用上”。我在活动中创建了ExpandableListView的实例,并通过构造函数将其传递给AsynchTask。
04-28 15:09:22.627 4654-4654/com.cinch.gogch E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.cinch.gogch, PID: 4654
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ExpandableListView.setAdapter(android.widget.ExpandableListAdapter)' on a null object reference
at com.cinch.gogch.tasks.GetPatientVitalsTask.onPostExecute(GetPatientVitalsTask.java:89)
at com.cinch.gogch.tasks.GetPatientVitalsTask.onPostExecute(GetPatientVitalsTask.java:36)
at android.os.AsyncTask.finish(AsyncTask.java:636)
at android.os.AsyncTask.access$500(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)