我的问题是,当我将此代码放入活动中时,它可以正常工作,但是当我尝试使用片段时,它会生成错误这是显示错误的地方:
public class CustomListAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<News> newItems;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public CustomListAdapter(Activity activity, List<News> newItems) {
this.activity = activity;
this.newItems = newItems;
}
@Override
public int getCount() {
return newItems.size();
}
@Override
public Object getItem(int location) {
return newItems.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (inflater == null)
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.list_row, null);
if (imageLoader == null)
imageLoader = AppController.getInstance().getImageLoader();
NetworkImageView thumbNail = (NetworkImageView) convertView
.findViewById(R.id.thumbnail);
TextView title = (TextView) convertView.findViewById(R.id.title);
// getting new data for the row
News m = newItems.get(position);
// thumbnail image
thumbNail.setImageUrl(m.getImageURL(), imageLoader);
// title
title.setText(m.getTitle());
return convertView;
}
}
public class AppController extends Application {
public static final String TAG = AppController.class.getSimpleName();
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static AppController mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static synchronized AppController getInstance() {
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
return mRequestQueue;
}
public ImageLoader getImageLoader() {
getRequestQueue();
if (mImageLoader == null) {
mImageLoader = new ImageLoader(this.mRequestQueue,
new LruBitmapCache());
}
return this.mImageLoader;
}
public <T> void addToRequestQueue(Request<T> req, String tag) {
// set the default tag if tag is empty
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
getRequestQueue().add(req);
}
public <T> void addToRequestQueue(Request<T> req) {
req.setTag(TAG);
getRequestQueue().add(req);
}
public void cancelPendingRequests(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}
}
这是日志:
05-06 01:36:54.754 23005-23005/pager.fakher.com.mypager E/Androidruntime:致命例外:主要 java.lang.nullpoInterException 在pager.fakher.com.mypager.adapter.customlistadapter。 在pager.fakher.com.mypager.fragments.actualitefragment.oncreateview(MATERITEFRAGMENT.JAVA:62) 在Android.support.v4.app.fragment.performcreateview(fragment.java:1789) 在Android.support.v4.app.FragmentManagerimpl.Movetostate(FragmentManager.java:955) 在Android.support.v4.app.FragmentManagerimpl.Movetostate(FragmentManager.java:1138) 在Android.support.v4.app.backstackrecord.run(backstackrecord.java:740) 在Android.support.v4.app.FragmentManagerimpl.execpendactions(FragmentManager.java:1501) 在android.support.v4.app.fragmentmanagerimpl.executependentsactions(fragmentManager.java:490) 在Android.support.v4.app.fragmentpageradapter.finishupdate(fragmentPageradapter.java:141) 在Android.support.v4.view.viewpager.populate(viewPager.java:1072) at android.support.v4.view.viewpager.populate(viewPager.java:918) at android.support.v4.view.viewpager.onmeasure(viewpager.java:1440) at android.view.view.measure(view.java:15876) 在android.widget.relativelayout.measurechildhorizontal(relativelayout.java:728) at android.widget.relativelayout.onmeasure(relativelayout.java:477) at android.view.view.measure(view.java:15876) at android.view.viewgroup.measurechildwithmargins(viewGroup.java:5023) at android.widget.framelayout.onmeasure(framelayout.java:310) at android.view.view.measure(view.java:15876) at android.view.viewgroup.measurechildwithmargins(viewGroup.java:5023) 在com.android.internal.widget.actionbaroverlaylaylayout.onmeasure(actionbaroverlaylayout.java:302) at android.view.view.measure(view.java:15876) at android.view.viewgroup.measurechildwithmargins(viewGroup.java:5023) at android.widget.framelayout.onmeasure(framelayout.java:310) 请访问com.android.internal.policy.impl.phonewindow $ docorview.onmeasure(phonewindow.java:2206) at android.view.view.measure(view.java:15876) at android.view.viewrootimpl.performmeasure(view rootimpl.java:1929) at android.view.viewRootimpl.measureHierArchy(view rootimpl.java:1113) at android.view.viewrootimpl.performtraversals(view rootimpl.java:1293) at android.view.viewrootimpl.dotraversal(view rootimpl.java:1013) at android.view.viewrootimpl $ traversalrunnable.run(view rootimpl.java:5507) at android.view.thotographer $ callbackRecord.run(choreographer.java:749) at Android.view.Choreographer.docallbacks(cohoregrapher.java:562) at android.view.choreographer.doframe(eboragrapher.java:532) at android.view.tecremather $ framedisPlayEventReceiver.run(ecreographer.java:735) 在Android.os.handler.handlecallback(Handler.java:730) 在Android.os.handler.dispatchMessage(Handler.java:92) at android.os.looper.loop(looper.java:137) at android.app.activitythread.main(activityThread.java:5473) 在java.lang.reflect.method.invokenative(本机方法) 在java.lang.reflect.method.invoke(method.java:525) 在com.android.internal.os.os.zygoteinit $ methodandargscaller.run(zygoteinit.java:854) 在com.android.internal.os.os.zygoteinit.main(zygoteinit.java:670) 在dalvik.system.nativestart.main(本机方法)
第24行是:
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
我的看法是您忘了在像这样的清单中添加该应用程序实现
<application
android:name=".package.AppController "
...
/>
这就是getInstance
返回null的原因。
来自应用程序类的Android指南:
注意:通常无需子类应用程序。在大多数情况下,静态单例可以以更模块化的方式提供相同的功能。如果您的单身人士需要一个全局上下文(例如要注册广播接收器),请在调用您的Singleton的getInstance()方法时inclate context.getApplicationContext()作为上下文参数。
https://developer.android.com/reference/android/anp/app/application.html
定期进行单身班,然后在那里接听电话。这是一个简单的例子:
public class Single {
private static Single mInstance;
private Single {}
public static Single getInstance() {
if (mInstance == null)
mInstance = new Single();
return mInstance;
}
}