在 AsyncTask 中设置 ListAdapter 时出错
Error setting ListAdapter in AsyncTask
这是我的 AsyncTask 的 onPostExecute() Class
myNewsListView = (ListView)findViewById(R.id.newsListView);
CustomListAdapter customListAdapter = new CustomListAdapter(values, getApplicationContext());
myNewsListView.setAdapter(customListAdapter);
这是 CustomListAdapter Class
public class CustomListAdapter extends BaseAdapter {
String Title[];
Context ctxt;
LayoutInflater myInflater;
public CustomListAdapter(String arr[], Context c)
{
Title = arr;
ctxt = c;
myInflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return Title.length;
}
@Override
public Object getItem(int i) {
return Title[i];
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
view = myInflater.inflate(R.layout.custom_list, viewGroup);
TextView titleText = (TextView)view.findViewById(R.id.newsTitle);
TextView descriptionText = (TextView)view.findViewById(R.id.newsDescription);
ImageView imageView = (ImageView)view.findViewById(R.id.newsImage);
titleText.setText(Title[i]);
return view;
}
}
每次尝试在此行设置适配器时,我都会遇到空指针异常 myNewsListView.setAdapter(customListAdapter);
。
这是 logCat 输出。
FATAL EXCEPTION: main
java.lang.NullPointerException
at samarth.learning.http.MainActivity$MyAsyncTask.onPostExecute(MainActivity.java:674)
at samarth.learning.http.MainActivity$MyAsyncTask.onPostExecute(MainActivity.java:374)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access0(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5225)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
我做错了什么?非常感谢任何建议和帮助。
如果您在 myNewsListView.setAdapter(customListAdapter)
上得到 java.lang.NullPointerException
,您的 (ListView)findViewById(R.id.newsListView)
可能会得到 NULL。
您应该在 AsyncTask 之外执行 myNewsListView = (ListView)findViewById(R.id.newsListView)
。
延伸阅读:Can't access “findViewById” in AsyncTask
这是我的 AsyncTask 的 onPostExecute() Class
myNewsListView = (ListView)findViewById(R.id.newsListView);
CustomListAdapter customListAdapter = new CustomListAdapter(values, getApplicationContext());
myNewsListView.setAdapter(customListAdapter);
这是 CustomListAdapter Class
public class CustomListAdapter extends BaseAdapter {
String Title[];
Context ctxt;
LayoutInflater myInflater;
public CustomListAdapter(String arr[], Context c)
{
Title = arr;
ctxt = c;
myInflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return Title.length;
}
@Override
public Object getItem(int i) {
return Title[i];
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
view = myInflater.inflate(R.layout.custom_list, viewGroup);
TextView titleText = (TextView)view.findViewById(R.id.newsTitle);
TextView descriptionText = (TextView)view.findViewById(R.id.newsDescription);
ImageView imageView = (ImageView)view.findViewById(R.id.newsImage);
titleText.setText(Title[i]);
return view;
}
}
每次尝试在此行设置适配器时,我都会遇到空指针异常 myNewsListView.setAdapter(customListAdapter);
。
这是 logCat 输出。
FATAL EXCEPTION: main
java.lang.NullPointerException
at samarth.learning.http.MainActivity$MyAsyncTask.onPostExecute(MainActivity.java:674)
at samarth.learning.http.MainActivity$MyAsyncTask.onPostExecute(MainActivity.java:374)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access0(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5225)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
我做错了什么?非常感谢任何建议和帮助。
如果您在 myNewsListView.setAdapter(customListAdapter)
上得到 java.lang.NullPointerException
,您的 (ListView)findViewById(R.id.newsListView)
可能会得到 NULL。
您应该在 AsyncTask 之外执行 myNewsListView = (ListView)findViewById(R.id.newsListView)
。
延伸阅读:Can't access “findViewById” in AsyncTask