Сбой при переключении в ListView? - PullRequest
0 голосов
/ 27 февраля 2012

У меня есть нормальный LinearLayout для моего main.xml, и мое второе действие - ListView. У меня есть кнопка на main.xml, которая должна привести меня к ListView. Я получаю Unexpected Error message и вынужден закрываться при нажатии на кнопку.

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:weightSum="1"
    android:background="@drawable/forzabg">

        <ImageView
            android:id="@+id/mainlogo"
            android:layout_width="210dp"
            android:layout_height="119dp"
            android:layout_gravity="center"
            android:layout_weight="0.00"
            android:scaleType="fitXY"
            android:src="@drawable/forzalogo" >

 </ImageView>

        <ImageView
            android:id="@+id/menuButton1"
            android:layout_width="185dp"
            android:layout_height="56dp"
            android:layout_gravity="center"
            android:layout_weight="0.14"
            android:src="@drawable/carslist" />

 />

</LinearLayout>

Java для main.xml:

    package com.forza;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

public class Forza2Activity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ImageView carbutton = (ImageView) findViewById(R.id.menuButton1);

        carbutton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Intent myIntent = new Intent(view.getContext(), CarList.class);
                startActivity(myIntent);
            }
        });

    }
}

carlist.xml (ListView) активность:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:orientation="vertical">

    <ListView
        android:id="@+id/mylist"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:entries="@array/Brands" >
    </ListView>

</LinearLayout>

Деятельность Java для ListView:

package com.forza;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;


    public class CarList extends Activity {



        ListView carList = (ListView) findViewById(R.id.mylist);
            protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.carlist);

            ImageView carbutton = (ImageView) findViewById(R.id.menuButton1);

            carbutton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    Intent intent = new Intent();
                    setResult(RESULT_OK, intent);
                    finish();
                };
          });       
       }
    }

LogCat:

02-26 16:35:50.158: W/dalvikvm(341): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
02-26 16:35:50.158: E/AndroidRuntime(341): Uncaught handler: thread main exiting due to uncaught exception
02-26 16:35:50.168: E/AndroidRuntime(341): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.forza/com.forza.CarList}: java.lang.NullPointerException
02-26 16:35:50.168: E/AndroidRuntime(341):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
02-26 16:35:50.168: E/AndroidRuntime(341):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
02-26 16:35:50.168: E/AndroidRuntime(341):  at android.app.ActivityThread.access$2200(ActivityThread.java:119)
02-26 16:35:50.168: E/AndroidRuntime(341):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
02-26 16:35:50.168: E/AndroidRuntime(341):  at android.os.Handler.dispatchMessage(Handler.java:99)
02-26 16:35:50.168: E/AndroidRuntime(341):  at android.os.Looper.loop(Looper.java:123)
02-26 16:35:50.168: E/AndroidRuntime(341):  at android.app.ActivityThread.main(ActivityThread.java:4363)
02-26 16:35:50.168: E/AndroidRuntime(341):  at java.lang.reflect.Method.invokeNative(Native Method)
02-26 16:35:50.168: E/AndroidRuntime(341):  at java.lang.reflect.Method.invoke(Method.java:521)
02-26 16:35:50.168: E/AndroidRuntime(341):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
02-26 16:35:50.168: E/AndroidRuntime(341):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
02-26 16:35:50.168: E/AndroidRuntime(341):  at dalvik.system.NativeStart.main(Native Method)
02-26 16:35:50.168: E/AndroidRuntime(341): Caused by: java.lang.NullPointerException
02-26 16:35:50.168: E/AndroidRuntime(341):  at android.app.Activity.findViewById(Activity.java:1612)
02-26 16:35:50.168: E/AndroidRuntime(341):  at com.forza.CarList.<init>(CarList.java:15)
02-26 16:35:50.168: E/AndroidRuntime(341):  at java.lang.Class.newInstanceImpl(Native Method)
02-26 16:35:50.168: E/AndroidRuntime(341):  at java.lang.Class.newInstance(Class.java:1479)
02-26 16:35:50.168: E/AndroidRuntime(341):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
02-26 16:35:50.168: E/AndroidRuntime(341):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
02-26 16:35:50.168: E/AndroidRuntime(341):  ... 11 more
02-26 16:35:50.178: I/dalvikvm(341): threadid=7: reacting to signal 3
02-26 16:35:50.178: E/dalvikvm(341): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
02-26 16:35:53.198: I/Process(341): Sending signal. PID: 341 SIG: 9
02-26 16:35:53.608: D/dalvikvm(348): GC freed 611 objects / 48680 bytes in 58ms
02-26 16:35:54.258: D/dalvikvm(348): GC freed 59 objects / 2336 bytes in 50ms

Можно ли вообще перейти от обычного представления к ListView?

1 Ответ

2 голосов
/ 27 февраля 2012

Ключевая строка в log такова:

02-26 16:35:50.168: E/AndroidRuntime(341): Caused by: java.lang.NullPointerException
02-26 16:35:50.168: E/AndroidRuntime(341):  at android.app.Activity.findViewById(Activity.java:1612)

Вы получаете null pointer exception, пытаясь найти представление .

Я подозреваю, что это ваша линия 1612:

  ListView carList = (ListView) findViewById(R.id.mylist);

Это должно быть внутри вашего onCreate(), потому что в тот момент (где он сейчас находится) онпока не будет инициализирован.


Возможно ли даже перейти от обычного представления к ListView?

Это точно.Но если вы уже не знаете об этом, я также предлагаю вам проверить ListActivity , которая позволит легко обрабатывать весь список данных и событий на элементах вашего CarList.


EDIT Отсутствует кнопка в carlist.xml

Когда вы устанавливаете ContentView как carlist.xml со строкой

    setContentView(R.layout.carlist);

Вам необходимо иметь соответствующий ImageView, называемый menuButton1 в carlist.xml, в противном случае вы получите ошибку в следующем вызове:

 ImageView carbutton = (ImageView) findViewById(R.id.menuButton1);

Чтобы избежать ошибки,просто добавьте новую кнопку ImageView в carlist.xml (на этот раз назовите ее как-нибудь иначе, а не menuButton1 )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...