NullPointerException при переключении между представлениями - PullRequest
0 голосов
/ 22 января 2012

Некоторые пользователи получают эту ошибку.

Я использую группу просмотра для постоянного отображения надписи баннера.

Затем я использую дочерние представления для программы и переключаюсь назад и вперед между представлениями в качествепользователь нажимает кнопку.

Я могу вызвать сбой, переключаясь между дочерними представлениями от 6 до 10 раз.

Вот макет для группы просмотра:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout    
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:myapp="http://schemas.android.com/apk/res/com.company.programname"
    xmlns:app="http://schemas.android.com/apk/res/com.adwhirl"      
    android:orientation="vertical"      
    android:background="@color/darkslategrey"
    android:id="@+id/LinearLayout01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <com.adwhirl.AdWhirlLayout          
        android:id="@+id/adwhirl_layout"
        android:gravity="center"          
        android:layout_width="fill_parent"          
        android:layout_height="52dp"
    />  
</LinearLayout>

Вот код, создающий ViewGroup:

   setContentView(R.layout.viewgrouplayout);
   llLinLay=(LinearLayout)findViewById(R.id.LinearLayout01);
   liInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

Вот основной дочерний макет с вырезанными ненужными фрагментами:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    android:id="@+id/MainLayout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">


    <Button
        android:id="@+id/MainShowAllDesiredButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/AnotherButton"
        android:layout_toRightOf="@id/AButton"
        android:textSize="15sp"
        android:text="Show All Desired"
        android:onClick="MainDesired"
    />


    <ListView
        android:id="@+id/ItemTypeList"
        android:background="@color/aqua"
        android:cacheColorHint="@color/aqua"
        android:fastScrollEnabled="true" 
        android:layout_width="fill_parent"
        android:layout_height="160dip"
        android:layout_below="@id/SomeItem"
    />

</RelativeLayout>

Вот пример кода, создающего представление:

   vAllDesired=liInflater.inflate(R.layout.alldesiredlayout,null);
   vAllDesired.setId(7);
   llLinLay.addView(vAllDesired);
   final ListView lvAllDesired = (ListView)findViewById(R.id.AllDesiredList);
   laAllDesiredAdapter = new AllDesiredListAdapter(this, alAllDesired);                    
   lvAllCoinsDesired.setAdapter(laAllDesiredAdapter);        
   ViewGroup.LayoutParams AllDesiredParams = lvAllCoinsDesired.getLayoutParams(); 
   AllDesiredParams.height = AllCoinsDesiredHeight; 
   lvAllCoinsDesired.setLayoutParams(AllDesiredParams); 
   FillAllDesiredArray();

Вот пример кода, используемого для переключения между представлениями:

    bReturnToMainScreen = (Button) findViewById(R.id.DesiredReturnToMainScreenButton);
    bReturnToMainScreen.setOnClickListener(new View.OnClickListener(){
       @Override
       public void onClick(View V) {
        llLinLay.removeView(vAllDesired);
        MainWindow();
       }
     });

Вот трассировка с сайта Android Developer.Номер строки в программе не всегда одинаков.

java.lang.NullPointerException
 at android.webkit.WebView.requestFocus(WebView.java:6113)
 at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:1073)
 at android.view.ViewGroup.requestFocus(ViewGroup.java:1029)
 at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:1073)
 at android.view.ViewGroup.requestFocus(ViewGroup.java:1029)
 at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:1073)
 at android.view.ViewGroup.requestFocus(ViewGroup.java:1029)
 at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:1073)
 at android.view.ViewGroup.requestFocus(ViewGroup.java:1029)
 at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:1073)
 at android.view.ViewGroup.requestFocus(ViewGroup.java:1029)
 at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:1073)
 at android.view.ViewGroup.requestFocus(ViewGroup.java:1032)
 at android.view.View.requestFocus(View.java:3559)
 at android.view.ViewRoot.clearChildFocus(ViewRoot.java:1586)
 at android.view.ViewGroup.clearChildFocus(ViewGroup.java:508)
 at android.view.ViewGroup.clearChildFocus(ViewGroup.java:508)
 at android.view.ViewGroup.clearChildFocus(ViewGroup.java:508)
 at android.view.ViewGroup.clearChildFocus(ViewGroup.java:508)
 at android.view.ViewGroup.removeViewInternal(ViewGroup.java:2207)
 at android.view.ViewGroup.removeViewInternal(ViewGroup.java:2181)
 at android.view.ViewGroup.removeView(ViewGroup.java:2129)
 at com.jimbobga.mycoinsus.ProgramName$8.onClick(ProgramName.java:488)
 at android.view.View.performClick(View.java:2411)
 at android.view.View$PerformClick.run(View.java:8819)
 at android.os.Handler.handleCallback(Handler.java:587)
 at android.os.Handler.dispatchMessage(Handler.java:92)
 at android.os.Looper.loop(Looper.java:123)
 at android.app.ActivityThread.main(ActivityThread.java:4627)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:521)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
 at dalvik.system.NativeStart.main(Native Method)

Ответы [ 3 ]

0 голосов
/ 23 января 2012

Посмотрите на эту строку:

at com.jimbobga.mycoinsus.ProgramName$8.onClick(ProgramName.java:488)

Если это происходит после того, как ориентация изменилась и виды не были назначены, у вас возникла проблема.

0 голосов
/ 20 августа 2012

У меня возникла та же проблема.

Посмотрите на этот ответ: Проблемы с Adwhirl (Admob + Inmobi + ..) Эрик из персонала AdMob говорит, что это проблема сфреймворк Android.

Вы пытались окружить свой код OnClick () исключением: try / catch Throwable?

0 голосов
/ 23 января 2012

Просто любопытно, когда вы делаете ваши вызовы findViewById, они находятся в методе OnCreate или прямо в том месте, где вы надуваете строку в адаптере? Поскольку это относится к вашему примеру здесь, метод findViewById гарантированно будет работать только в методе OnCreate или там, где конкретная строка надувается, поэтому возможно, что вызов его в другом месте может вызвать неожиданное поведение.

...