在这篇文章中,我们将带领您了解设置LayoutParams时发生NullPointerException的全貌,包括layout(null)的相关情况。同时,我们还将为您介绍有关android–Cla
在这篇文章中,我们将带领您了解设置LayoutParams时发生NullPointerException的全貌,包括layout(null)的相关情况。同时,我们还将为您介绍有关android – ClassCastException LinearLayout LayoutParams、android – ClassCastException:AbsListView $LayoutParams无法强制转换为Gallery $LayoutParams、android – NullPointerException在TextView.checkForRelayout(),而setText()、android – 为什么使用标准BillingService会发生NullPointerException?的知识,以帮助您更好地理解这个主题。
本文目录一览:- 设置LayoutParams时发生NullPointerException(layout(null))
- android – ClassCastException LinearLayout LayoutParams
- android – ClassCastException:AbsListView $LayoutParams无法强制转换为Gallery $LayoutParams
- android – NullPointerException在TextView.checkForRelayout(),而setText()
- android – 为什么使用标准BillingService会发生NullPointerException?
设置LayoutParams时发生NullPointerException(layout(null))
我想以编程方式添加一个按钮,也应该设置LayoutParams。不幸的是,该应用程序给出了一个例外:
java.lang.NullPointerException:尝试在空对象引用上写入字段“ int android.view.ViewGroup $
LayoutParams.height”
我不知道为什么。你可以帮帮我吗?这是我的代码。
Button b = new Button(getApplicationContext()); b.setText(R.string.klick); ViewGroup.LayoutParams params = b.getLayoutParams(); params.height = ViewGroup.LayoutParams.MATCH_PARENT; params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
答案1
小编典典由于您以编程方式创建Button,b
因此不会设置任何布局参数。因此,您需要像这样手动设置它们:
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);b.setLayoutParams(params);
或者至少在更改参数之前检查参数是否不为null
ViewGroup.LayoutParams params = b.getLayoutParams(); if (params != null) { params.width= ViewGroup.LayoutParams.MATCH_PARENT; params.height = ViewGroup.LayoutParams.WRAP_CONTENT; } else params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
android – ClassCastException LinearLayout LayoutParams
12-22 16:00:37.620: W/System.err(7235): java.lang.classCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams 12-22 16:00:37.625: W/System.err(7235): at com.coover.eu.lostandfound.ListSearchFragment.onViewCreated(ListSearchFragment.java:184) 12-22 16:00:37.625: W/System.err(7235): at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:884) 12-22 16:00:37.630: W/System.err(7235): at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1080) 12-22 16:00:37.630: W/System.err(7235): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622) 12-22 16:00:37.630: W/System.err(7235): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416) 12-22 16:00:37.630: W/System.err(7235): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:505) 12-22 16:00:37.630: W/System.err(7235): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1178) 12-22 16:00:37.635: W/System.err(7235): at android.app.Activity.performStart(Activity.java:5216) 12-22 16:00:37.635: W/System.err(7235): at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2083) 12-22 16:00:37.635: W/System.err(7235): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 12-22 16:00:37.635: W/System.err(7235): at android.app.ActivityThread.access$700(ActivityThread.java:140) 12-22 16:00:37.635: W/System.err(7235): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 12-22 16:00:37.640: W/System.err(7235): at android.os.Handler.dispatchMessage(Handler.java:99) 12-22 16:00:37.640: W/System.err(7235): at android.os.Looper.loop(Looper.java:137) 12-22 16:00:37.640: W/System.err(7235): at android.app.ActivityThread.main(ActivityThread.java:4921) 12-22 16:00:37.640: W/System.err(7235): at java.lang.reflect.Method.invokeNative(Native Method) 12-22 16:00:37.640: W/System.err(7235): at java.lang.reflect.Method.invoke(Method.java:511) 12-22 16:00:37.645: W/System.err(7235): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 12-22 16:00:37.645: W/System.err(7235): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 12-22 16:00:37.645: W/System.err(7235): at dalvik.system.NativeStart.main(Native Method)
膨胀的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:id="@+id/container_found_list_overview"> <EditText android:id="@+id/search_Box" android:layout_width="fill_parent" android:layout_height="50dp" android:padding="5dp" android:textSize="35sp" android:hint="@string/search" android:inputType="text" android:maxLines="1"/> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/overview_list_view"> </ListView> </LinearLayout>
代码:
LinearLayout myView = (LinearLayout)this.getView().findViewById(R.id.container_found_list_overview); Log.d("found container",""+(myView != null)); try{ LayoutParams lp = (LayoutParams) myView.getLayoutParams(); lp.weight = 1; lp.width = 0; myView.setLayoutParams(lp); } catch(RuntimeException e){ Log.e("cant get layoutparams",e.getMessage()); e.printstacktrace(); }
解决方法
为什么是父母的类型?这是因为他们存储对父母有用的信息.如果要检索EditText或ListView的布局参数,您将获得LinearLayout $LayoutParams.
android – ClassCastException:AbsListView $LayoutParams无法强制转换为Gallery $LayoutParams
这个应用程序将有很多图像,我已经按照Processing Bitmaps Off the UI Thread教程,但我做错了,因为我得到:
java.lang.classCastException:android.widget.AbsListView $LayoutParams无法强制转换为android.widget.gallery $LayoutParams
这是我的代码:
我在一个Activity上设置了gallery
mFactgallery = (gallery)mView.findViewById(R.id.factgallery); mFactgallery.setAdapter(new ImagegalleryAdapter(mActivity,ImageView.ScaleType.FIT_END,180,90));
ImagegalleryAdapter.java
public class ImagegalleryAdapter extends BaseAdapter { private ArrayList<String> mImagesPath; private Context mContext; private int mWidth; private int mHeight; public ArrayList<String> getmImagesPath() { return mImagesPath; } public void setmImagesPath(ArrayList<String> mImagesPath) { this.mImagesPath = mImagesPath; } public void addImage(String imagePath) { mImagesPath.add(imagePath); } public ImagegalleryAdapter(Context context,ImageView.ScaleType scaleType,int width,int height) { mContext = context; mWidth = width; mHeight = height; mScaleType = scaleType; mImagesPath = new ArrayList<String>(); } @Override public int getCount() { return mImagesPath.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position,View convertView,ViewGroup parent) { // Get a View to display image data ImageView imageView; // if it's not recycled,initialize some attributes if (convertView == null) { imageView = new ImageView(mContext); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setLayoutParams(new GridView.LayoutParams( LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); } else { imageView = (ImageView) convertView; // Recicla el Bitmap. Bitmap bm = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); if (bm != null) bm.recycle(); } String filePath = mImagesPath.get(position); if (BitmapTools.cancelPotentialWork(filePath,imageView)) { String[] params = {filePath,Integer.toString(mWidth),Integer.toString(mHeight)}; final BitmapWorkerTask task = new BitmapWorkerTask(imageView); final AsyncDrawable asyncDrawable = new AsyncDrawable(mContext.getResources(),filePath,task); imageView.setimageDrawable(asyncDrawable); task.execute(params); } return imageView; } }
BitmapWorkerTask.java
public class BitmapWorkerTask extends AsyncTask<String,Void,Bitmap> { private final WeakReference<ImageView> imageViewReference; public String imgPath = ""; public BitmapWorkerTask(ImageView imageView) { // Use a WeakReference to ensure the ImageView can be garbage collected imageViewReference = new WeakReference<ImageView>(imageView); } // Decode image in background. @Override protected Bitmap doInBackground(String... params) { imgPath = params[0]; int width = Integer.valueOf(params[1]).intValue(); int height = Integer.valueOf(params[2]).intValue(); return BitmapTools.decodeSampledBitmapFromdisk(imgPath,width,height); } // Once complete,see if ImageView is still around and set bitmap. @Override protected void onPostExecute(Bitmap bitmap) { if (isCancelled()) { bitmap = null; } if (imageViewReference != null && bitmap != null) { final ImageView imageView = imageViewReference.get(); final BitmapWorkerTask bitmapWorkerTask = BitmapTools.getBitmapWorkerTask(imageView); if (this == bitmapWorkerTask && imageView != null) { imageView.setimageBitmap(bitmap); } } } }
AsyncDrawable.java
public class AsyncDrawable extends BitmapDrawable { private final WeakReference<BitmapWorkerTask> bitmapWorkerTaskReference; public AsyncDrawable(Resources res,String filepath,BitmapWorkerTask bitmapWorkerTask) { super(res,filepath); bitmapWorkerTaskReference = new WeakReference<BitmapWorkerTask>(bitmapWorkerTask); } public BitmapWorkerTask getBitmapWorkerTask() { return bitmapWorkerTaskReference.get(); } }
我究竟做错了什么?
解决方法
imageView.setLayoutParams(new gallery.LayoutParams( LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
android – NullPointerException在TextView.checkForRelayout(),而setText()
我需要为我的标记创建一些标签.在draw()中的数据处理中调用此方法
// Now we create label view and convert it into bitmap private Bitmap createLabelBitmap(GisLaborHistoryObject object,HistoryPoint point) { // create view from xml if (vh == null) { vh = new ViewHolder(); vh.view = inflater.inflate(R.layout.map_gis_history_label,null,false); vh.tv = (TextView) vh.view.findViewById(R.id.gislabeltext); } // set label content if (vh.tv != null) { if (!mSingleLaborHistory) { String name = ""; name = object.getdisplayName(); if (name == null || "".equals(name)) name = object.getPersonId(); if (name == null || "".equals(name)) name = object.getLaborCode(); if (name == null) name = ""; vh.tv.setText(name); } else vh.tv.setText(point.getChangeDate()); } // measure resulting view vh.view.measure(spec,spec); vh.view.layout(0,vh.view.getMeasuredWidth(),vh.view.getMeasuredHeight()); Bitmap b = Bitmap.createBitmap(vh.view.getWidth(),vh.view.getHeight(),Bitmap.Config.ARGB_8888); canvasToDraw.setBitmap(b); canvasToDraw.translate(-vh.view.getScrollX(),-vh.view.getScrollY()); vh.view.draw(canvasToDraw); return b; }
规格是
spec = MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED);
结果是
logcat的:
04-29 17:12:34.057: E/AndroidRuntime(389): java.lang.NullPointerException 04-29 17:12:34.057: E/AndroidRuntime(389): at android.widget.TextView.checkForRelayout(TextView.java:5497) 04-29 17:12:34.057: E/AndroidRuntime(389): at android.widget.TextView.setText(TextView.java:2730) 04-29 17:12:34.057: E/AndroidRuntime(389): at android.widget.TextView.setText(TextView.java:2598) 04-29 17:12:34.057: E/AndroidRuntime(389): at android.widget.TextView.setText(TextView.java:2573) 04-29 17:12:34.057: E/AndroidRuntime(389): at com.xxx.android.proj.ui.map.overlays.LaborsMarkerOverlay.createLabelBitmap(LaborsMarkerOverlay.java:164)
我使用的XML布局
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gislabeltext"android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="2dp" android:paddingRight="2dp" />
可能是这个错误的原因?
解决方法
我添加明确设置此参数的行.现在一切正常
vh.tv = (TextView) vh.view.findViewById(R.id.gislabeltext); vh.tv.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
我的错误是,当使用ViewGroup膨胀时,我必须显式设置LayoutParams root = null;一切正常,直到我尝试重用TextView乘法时间.
android – 为什么使用标准BillingService会发生NullPointerException?
我在我的应用程序中使用标准BillingService(即从sample application复制而不做更改).
但有时我的应用程序崩溃与logcat中的以下数据:
04-16 10:05:43.556: INFO/ActivityManager(96): Start proc tv.kinobaza.app for service tv.kinobaza.app/tv.kinobaza.billing.BillingService: pid=28748 uid=10081 gids={3003}
04-16 10:05:43.646: DEBUG/AndroidRuntime(28748): Shutting down VM
04-16 10:05:43.656: WARN/dalvikvm(28748): threadid=1: thread exiting with uncaught exception (group=0x400259f8)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): FATAL EXCEPTION: main
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): java.lang.RuntimeException: Unable to start service tv.kinobaza.billing.BillingService@4632f578 with null: java.lang.NullPointerException
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3282)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): at android.app.ActivityThread.access$3600(ActivityThread.java:135)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2211)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): at android.os.Handler.dispatchMessage(Handler.java:99)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): at android.os.Looper.loop(Looper.java:144)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): at android.app.ActivityThread.main(ActivityThread.java:4937)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): at java.lang.reflect.Method.invokeNative(Native Method)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): at java.lang.reflect.Method.invoke(Method.java:521)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): at dalvik.system.NativeStart.main(Native Method)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): Caused by: java.lang.NullPointerException
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): at tv.kinobaza.billing.BillingService.onStart(UnkNown Source)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): at android.app.Service.onStartCommand(Service.java:420)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3267)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): ... 10 more
04-16 10:05:43.736: DEBUG/SurfaceFlinger(96): Layer::setBuffers(this=0xb947a8),pid=96,w=1,h=1
04-16 10:05:43.736: DEBUG/SurfaceFlinger(96): Layer::setBuffers(this=0xb947a8),h=1
04-16 10:05:43.766: DEBUG/SurfaceFlinger(96): Layer::requestBuffer(this=0xb947a8),index=0,w=480,h=418 success
04-16 10:05:43.986: DEBUG/dalvikvm(28721): GC_FOR_MALLOC freed 9604 objects / 1369120 bytes in 102ms
这是相关的代码:
/**
* We don't support binding to this service,only starting the service.
*/
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onStart(Intent intent,int startId) {
handleCommand(intent,startId);
}
这有什么不对?
我注意到了 – 当设备在夜间睡觉时,一旦我开始使用它,它会在约5分钟内崩溃.
并且,以下是更多详细信息:BillingService从我的应用程序的“首选项”屏幕开始.这里是Preferences类的代码:
@Override
protected void onDestroy() {
mBillingService.unbind();
super.onDestroy();
}
UPD.也许,我应该在Main活动中启动此服务/解除绑定?
这是我的proguard.cfg:
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.broadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep class com.android.vending.billing.**
-keepclasseswithmembernames class * {
native java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-libraryjars /lib/libGoogleAnalytics.jar
-libraryjars /lib/signpost-commonshttp4-1.2.1.1.jar
-libraryjars /lib/signpost-core-1.2.1.1.jar
-dontwarn org.apache.commons.codec.binary.Base64
你必须混淆一些你不应该喜欢扩展应用程序/活动/服务的类
你不应该混淆这些类:
http://proguard.sourceforge.net/index.html#/manual/examples.html(转到例7)
今天关于设置LayoutParams时发生NullPointerException和layout(null)的讲解已经结束,谢谢您的阅读,如果想了解更多关于android – ClassCastException LinearLayout LayoutParams、android – ClassCastException:AbsListView $LayoutParams无法强制转换为Gallery $LayoutParams、android – NullPointerException在TextView.checkForRelayout(),而setText()、android – 为什么使用标准BillingService会发生NullPointerException?的相关知识,请在本站搜索。
本文标签: