GVKun编程网logo

三元运算符和意外的NullPointerException(三元运算符报错)

18

对于想了解三元运算符和意外的NullPointerException的读者,本文将提供新的信息,我们将详细介绍三元运算符报错,并且为您提供关于android–Screen旋转后的nullPointer

对于想了解三元运算符和意外的NullPointerException的读者,本文将提供新的信息,我们将详细介绍三元运算符报错,并且为您提供关于android – Screen旋转后的nullPointerException、android – super.onStart()上的NullPointerException、android – 来自Parcel.readException的NullPointerException(等)、android – 活动测试教程中的NullPointerException的有价值信息。

本文目录一览:

三元运算符和意外的NullPointerException(三元运算符报错)

三元运算符和意外的NullPointerException(三元运算符报错)

NullPointerException有时会从下面的行中得到。

System.out.println("Date::"+ row != null ? row.getLegMaturityDate() : "null");

添加括号后,就可以了。

System.out.println("Date::"+ (row != null ? row.getLegMaturityDate() : "null"));

请澄清我的行为。提前致谢。

答案1

小编典典

"Date::" + row永远不会为null,尽管row有时是。

也就是说,"Date::"+ row != null等同于("Date::"+ row) != null总是如此。

android – Screen旋转后的nullPointerException

android – Screen旋转后的nullPointerException

我在屏幕旋转后得到对象LinearLayout返回的nullPointerException异常,虽然我在onCreate()super.onCreate(null)中传递null; .
我知道Activity必须被销毁并重新创建旁边我传递的savedInstanceState = null表示Activity应该在旋转后开始,因为它是第一次启动,为什么我在旋转后得到这个Exception?

onCreate()片段,其中LinearLayout对象称为historyText

LinearLayout historyText ;  // this return exception if it used after rotation . 

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
    setContentView(R.layout.activity_main);
    historyText = (LinearLayout) findViewById(R.id.historyLayoutText); 
    Log.e("HISTORYVISIBILITY", "VISIBILITY = "+historyText.getVisibility());
    getwindow().getDecorView().setsystemUIVisibility(
            View.SYstem_UI_FLAG_LAYOUT_STABLE
                    | View.SYstem_UI_FLAG_LAYOUT_FULLSCREEN);
    database = new Database(this);
    Bundle extras = getIntent().getExtras();
    intent = extras.getInt("activity");
    p = new Progress();
    getSupportFragmentManager().beginTransaction()
                .add(R.id.group, p)
                .commit();
    orientation = getRotation();
    switch (orientation){
        case "p" :
            addplus();
    }
}

logcat的

    10-07 22:21:24.365: E/AndroidRuntime(7768): FATAL EXCEPTION: main
10-07 22:21:24.365: E/AndroidRuntime(7768): Process: developer.mohab.gymee, PID: 7768
10-07 22:21:24.365: E/AndroidRuntime(7768): java.lang.RuntimeException: Unable to start activity ComponentInfo{developer.mohab.gymee/developer.mohab.gymee.Cardio.Cardio}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.widget.LinearLayout.getVisibility()' on a null object reference
10-07 22:21:24.365: E/AndroidRuntime(7768):     at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2379)
10-07 22:21:24.365: E/AndroidRuntime(7768):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2442)
10-07 22:21:24.365: E/AndroidRuntime(7768):     at android.app.ActivityThread.handlerelaunchActivity(ActivityThread.java:4053)
10-07 22:21:24.365: E/AndroidRuntime(7768):     at android.app.ActivityThread.access$900(ActivityThread.java:156)
10-07 22:21:24.365: E/AndroidRuntime(7768):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357)
10-07 22:21:24.365: E/AndroidRuntime(7768):     at android.os.Handler.dispatchMessage(Handler.java:102)
10-07 22:21:24.365: E/AndroidRuntime(7768):     at android.os.Looper.loop(Looper.java:211)
10-07 22:21:24.365: E/AndroidRuntime(7768):     at android.app.ActivityThread.main(ActivityThread.java:5389)
10-07 22:21:24.365: E/AndroidRuntime(7768):     at java.lang.reflect.Method.invoke(Native Method)
10-07 22:21:24.365: E/AndroidRuntime(7768):     at java.lang.reflect.Method.invoke(Method.java:372)
10-07 22:21:24.365: E/AndroidRuntime(7768):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
10-07 22:21:24.365: E/AndroidRuntime(7768):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
10-07 22:21:24.365: E/AndroidRuntime(7768): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.widget.LinearLayout.getVisibility()' on a null object reference
10-07 22:21:24.365: E/AndroidRuntime(7768):     at developer.mohab.gymee.Cardio.Cardio.onCreate(Cardio.java:76)
10-07 22:21:24.365: E/AndroidRuntime(7768):     at android.app.Activity.performCreate(Activity.java:5990)
10-07 22:21:24.365: E/AndroidRuntime(7768):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
10-07 22:21:24.365: E/AndroidRuntime(7768):     at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2332)
10-07 22:21:24.365: E/AndroidRuntime(7768):     ... 11 more
10-07 22:21:24.633: E/SurfaceFlinger(319): rejecting buffer: bufWidth=1358, bufheight=624, front.active.{w=193, h=193}

解决方法:

旋转设备时,活动及其上的所有碎片都将被销毁.要避免这种情况,您应该修改AndroidManifest.xml

<activity
            android:name=".MainActivity"
            android:configChanges="orientation|screenSize"

这样可以防止异常

android – super.onStart()上的NullPointerException

android – super.onStart()上的NullPointerException

目前我正在编写Fragment,它扩展了扩展YouTubePlayerSupportFragment的自定义SherlockFragment.不幸的是,应用程序崩溃了.

码:

public static class YouTubeVideo extends SherlockYouTubeFragment
         implements YouTubePlayer.OnInitializedListener{
private TextView titleview;
private TextView descview;
private TextView countview;
private TextView timeview;
private Bundle data;

 private YouTubePlayer ytp;
private String title;
private String id;
private String desc;
private String count;
private String time;
private int timeint;
private int timem;
private int times;
private Tracker myTracker;
private ShareActionProvider mShareActionProvider;
@Override
public View onCreateView (LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
    data = getArguments();
    return inflater.inflate(R.layout.youtubeview,container,false);
}

@Override
public void onStart() {
     titleview = (TextView) getView().findViewById(R.id.title);
     descview = (TextView) getView().findViewById(R.id.descriptiontext);
     countview = (TextView) getView().findViewById(R.id.viewcounttext);
     timeview = (TextView) getView().findViewById(R.id.timetext);

     title = data.getString("title");
     id = data.getString("id");
     desc = data.getString("description");
     count = data.getString("viewcount");
     time = data.getString("time");
     EasyTracker.getInstance().setContext(this.getActivity());
     myTracker = EasyTracker.getInstance().getTracker();
     FragmentManager fragmentManager = getFragmentManager();
     FragmentTransaction fragmentTransaction = fragmentManager
             .beginTransaction();

     YouTubePlayerSupportFragment fragment = new YouTubePlayerSupportFragment();
      fragment.initialize(ID,this);
     fragmentTransaction.add(R.id.youtubeplayer,fragment);
     fragmentTransaction.commit();
  titleview.setText(title);
  descview.setText(desc);
  countview.setText(count);
  try {
      timeint = Integer.parseInt(time);
      timem = timeint/60;
      times = timeint - (timem*60);      
  } catch(NumberFormatException nfe) {
    // Handle parse error.
  }
  if (times<10){
timeview.setText(String.valueOf(timem)+":0"+String.valueOf(times));
 }
  else{
      timeview.setText(String.valueOf(timem)+":"+String.valueOf(times));
  }
  super.onStart();
 }

 @Override
 public void onInitializationFailure(Provider arg0,YouTubeInitializationResult arg1) {
  Toast.makeText(this.getActivity(),"Uruchamianie filmu nie powiodło się",Toast.LENGTH_LONG).show();
 }

 @Override
 public void onInitializationSuccess(Provider provider,YouTubePlayer player,boolean wasrestored) {
  ytp = player;
  player.addFullscreenControlFlag(4);
  if(ytp !=null){
        ytp.loadVideo(id);
       }
 }
 public boolean onCreateOptionsMenu(Menu menu) {
     MenuInflater inflater = getSherlockActivity().getSupportMenuInflater();
     inflater.inflate(R.menu.video_menu,menu);
     mShareActionProvider = (ShareActionProvider)menu.findItem(R.id.share).getActionProvider();
     mShareActionProvider.setShareIntent(createShareIntent());

     return true;
 }
 private Intent createShareIntent() {
     myTracker.trackEvent("videoview","share",title + id,(long) 3);

        Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_TEXT,title + " - http://ignastv.tk/id/" + id);
    sendIntent.setType("text/plain");
    mShareActionProvider.setShareIntent(sendIntent);
    return sendIntent;
}

 public boolean onoptionsItemSelected(MenuItem item) {
     int itemId = item.getItemId();

        if(itemId == R.id.vidsite){
            myTracker.trackEvent("videoview","open-in",(long) 3);
            Intent govideo = new Intent(Intent.ACTION_VIEW);
            govideo.setData(Uri.parse(id));
            startActivity(govideo);
            return true;}

        else {
            return super.onoptionsItemSelected(item);
        }

}

}

最有趣的是LogCat显示出行的NullPointerException:

super.onStart();

这是LogCat:

04-27 20:19:30.055: E/AndroidRuntime(14706): FATAL EXCEPTION: main
    04-27 20:19:30.055: E/AndroidRuntime(14706): java.lang.NullPointerException
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at com.google.android.youtube.player.YouTubePlayerSupportFragment.onStart(UnkNown Source)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at com.app.app.MainActivity$YouTubeVideo.onStart(MainActivity.java:519)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.support.v4.app.Fragment.performStart(Fragment.java:1332)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:906)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1080)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.os.Handler.handleCallback(Handler.java:725)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.os.Handler.dispatchMessage(Handler.java:92)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.os.Looper.loop(Looper.java:137)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at android.app.ActivityThread.main(ActivityThread.java:5039)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at java.lang.reflect.Method.invokeNative(Native Method)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at java.lang.reflect.Method.invoke(Method.java:511)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    04-27 20:19:30.055: E/AndroidRuntime(14706):    at dalvik.system.NativeStart.main(Native Method)

这段代码有什么问题?

解决方法

在SDK中并不清楚,但只要我能够解决它,你就不会扩展YouTubePlayerFragment.您只需在您的布局中包含片段(它也可以作为嵌套片段).

基本上你有两种选择:

>扩展YouTubeBaseActivity并扩展包含YouTubePlayerView的布局 – 它可以工作但你不能使用碎片
>使用您最喜欢的活动并为包含YouTubePlayerFragment的布局进行充气.不要延长它.

我已成功将YoutubePlayerFragment添加为嵌套片段(更新:这会导致一些内存泄漏,因此您可能更愿意避免它).您可以在YouTubePlayerFragment周围添加其他组件,但请注意,因为docs表示您无法在播放视频时将此视图与其他视图叠加在一起.

因此,要解决您的问题,请不要扩展YouTubePlayerFragment,只需将其包含在您的布局中即可.通过调用此片段的初始化,您将在回调中获得一个YouTubePlayer,您可以使用它来控制视频.

android – 来自Parcel.readException的NullPointerException(等)

android – 来自Parcel.readException的NullPointerException(等)

看起来像这样的例外令人困惑:
FATAL EXCEPTION: main
java.lang.NullPointerException
    at android.os.Parcel.readException(Parcel.java:1437)
    at android.os.Parcel.readException(Parcel.java:1385)
    at com.yourpackage.ipc.IYourClass$Stub$Proxy.yourMethod(IYourClass.java:488)
    at com.yourpackage.ipc.YourClassShim.yourMethod(YourClassShim.java:269)

我找到了一堆相关的问题,但没有一个回答“你如何调试这个”.所以我正在提出这个问题/答案.

通过查看android源码here和here,你会发现它可以抛出任何这些(NullPointerException就是我所拥有的):

SecurityException(msg);
BadParcelableException(msg);
IllegalArgumentException(msg);
NullPointerException(msg);
IllegalStateException(msg);
RuntimeException("UnkNown exception code: " + code + " msg " + msg);

但究竟是什么导致了这些?

解决方法

这里发生的是readException()正在检查IPC字节流中是否有一个标题,表明发生了异常;如果它找到一个,那么它会抛出该类型的新异常,并使用相同的消息,但是缺少原始堆栈跟踪. (它实际上只知道一些异常类型;其他任何东西都被转换为基本的RuntimeException.)

那么最初的例外来自哪里?好吧,在YourClass.yourMethod()的实际实现的某个地方 – 不在任何parcelable或IPC代码中.所以去那里,将整个方法包装在try / catch中,并记录你抓到的任何内容.

(或者如果你有远程进程断点工作,那么在那里设置一个断点.)

android – 活动测试教程中的NullPointerException

android – 活动测试教程中的NullPointerException

我目前正在尝试活动测试教程(Found here),并遇到问题.似乎每当我尝试在UIThread中调用某些东西时,我都会得到一个java.lang.NullPointerException.

public void testSpinnerUI() {
    mActivity.runOnUiThread( new Runnable() {  
        public void run() {  
            mSpinner.requestFocus();
        }  
    });  
}

这给了我:

Incomplete: java.lang.NullPointerException

没有别的.我现在在两个不同的样品上尝试了这个,结果相同.我试着围绕mSpinner.requestFocus()调用使用try / catch子句,似乎mSpinner在线程内是null.我已经使用在同一个示例中找到的setUp()函数正确设置了它,并且快速assertNotNull(mSpinner)向我显示在setUp()函数之后mSpinner实际上不是null.这可能是什么原因?

编辑;好的,已经完成了一些测试.似乎正在测试的应用程序在每个测试之间重置.这基本上使我必须在每次测试之间重新实例化所有变量.这是正常的吗?

解决方法:

好的,所以看来我现在就开始工作了.至少到某一点.我仍然无法在runOnUiThread()中运行任何东西,但我发现使用@UiThreadTest注释给了我满意的结果.我不再获得NullPointerExceptions,并且setUp()方法甚至可以正确运行.我不知道是什么导致了这个,但是,嘿,至少它正在工作:)

关于三元运算符和意外的NullPointerException三元运算符报错的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于android – Screen旋转后的nullPointerException、android – super.onStart()上的NullPointerException、android – 来自Parcel.readException的NullPointerException(等)、android – 活动测试教程中的NullPointerException的相关知识,请在本站寻找。

本文标签: