2

やあみんな何時間も探してるんだけど、何も見つからないようだ。ユーザーのお気に入りの引用をリスト ビューに表示して保存したいのですが、リスト ビュー アクティビティに移動できないようです。すべての助けに感謝します!ここに私のコードがあります:

パブリッククラスのお気に入りを見ると、助けが必要です。

public class Startme extends Activity {
    Random gen= new Random();
    int num = 0;

    String[] quotes={
            "End of Quotes, hit next",
            "QUOTE2",
            "QUOTE3",
            "QUOTE4",
            "QUOTE5",};


    public void favorite(View F) {
        Intent intent = new Intent(Startme.this, Fav.class);
        intent.putExtra("quotes",num);
    }    

    public void next(View N){
        num++;
        if(num == 5)
            num = 0;

        TextView text = (TextView) findViewById(R.id.Quote);
        text.setText( quotes[num]);

        TextView number = (TextView) findViewById(R.id.Qn);
        number.setText(""+num);
    }

    public void back(View B){
        if(num==0)
            num=4;
        else
            num--;

        TextView text = (TextView) findViewById(R.id.Quote);
        text.setText(quotes[num]);

        TextView number = (TextView) findViewById(R.id.Qn);
        number.setText(""+num);
    }

    public void rand(View G)  {
        num = gen.nextInt(5);
        TextView text = (TextView) findViewById(R.id.Quote);
        text.setText(quotes[num]);
        TextView number = (TextView) findViewById(R.id.Qn);
        number.setText(""+num); 
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.startquotes);

        TextView Dark=(TextView)findViewById(R.id.Quote); 
        Typeface face=Typeface.createFromAsset(getAssets(), "fonts/font1.ttf"); 
        Dark.setTypeface(face); 

        num = gen.nextInt(5);
        TextView text = (TextView) findViewById(R.id.Quote);
        text.setText( quotes[num]);

        TextView number = (TextView) findViewById(R.id.Qn);
        number.setText(""+num);
    }

    public void favs(View F){
        Intent intent = new Intent(this, Fav.class);
        startActivity(intent);
    }
}

インテントで作成したリストビュークラスは次のとおりです

public class Fav extends Activity {
    public ArrayAdapter<String> lvAdapter;
    public ListView lv;

    String extras2;
    String[] datos = new String[] {extras2};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.setContentView(R.layout.faves);   

        Bundle extras = getIntent().getExtras();  
        extras2 = extras.getString("quotes");

        lvAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,datos);
        lv = (ListView) findViewById(R.id.list);
        lv.setAdapter(lvAdapter);
    }
}

ログキャット

07-18 04:10:30.565: E/AndroidRuntime(7370): Uncaught handler: thread main exiting due to uncaught exception
07-18 04:10:30.597: E/AndroidRuntime(7370): java.lang.RuntimeException: Unable to start activity ComponentInfo{me.me.quote/me.me.quote.Fav}: java.lang.NullPointerException
07-18 04:10:30.597: E/AndroidRuntime(7370):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
07-18 04:10:30.597: E/AndroidRuntime(7370):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
07-18 04:10:30.597: E/AndroidRuntime(7370):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
07-18 04:10:30.597: E/AndroidRuntime(7370):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
07-18 04:10:30.597: E/AndroidRuntime(7370):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-18 04:10:30.597: E/AndroidRuntime(7370):     at android.os.Looper.loop(Looper.java:123)
07-18 04:10:30.597: E/AndroidRuntime(7370):     at android.app.ActivityThread.main(ActivityThread.java:4363)
07-18 04:10:30.597: E/AndroidRuntime(7370):     at java.lang.reflect.Method.invokeNative(Native Method)
07-18 04:10:30.597: E/AndroidRuntime(7370):     at java.lang.reflect.Method.invoke(Method.java:521)
07-18 04:10:30.597: E/AndroidRuntime(7370):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
07-18 04:10:30.597: E/AndroidRuntime(7370):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-18 04:10:30.597: E/AndroidRuntime(7370):     at dalvik.system.NativeStart.main(Native Method)
07-18 04:10:30.597: E/AndroidRuntime(7370): Caused by: java.lang.NullPointerException
07-18 04:10:30.597: E/AndroidRuntime(7370):     at me.me.quote.Fav.onCreate(Fav.java:34)
07-18 04:10:30.597: E/AndroidRuntime(7370):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-18 04:10:30.597: E/AndroidRuntime(7370):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
07-18 04:10:30.597: E/AndroidRuntime(7370):     ... 11 more
4

1 に答える 1

3

ここで受け取るエクストラを渡さないため、 fav() を使用するとクラッシュすると思います。

Bundle extras = getIntent().getExtras();  
extras2 = extras.getString("quotes");

null をチェックして、Null Pointer Exceptions が発生しないようにします。

Bundle extras = getIntent().getExtras();  
if(extras != null)
    extras2 = extras.getString("quotes");

また num、文字列ではintなく です:

intent.putExtra("quotes count", num);

ints を次のように読む必要があります。

int count = extras.getInt("quotes count", 0);

getString("quotes count")そのキーを持つ文字列はなく、整数のみであるため、使用すると null が返されます。

最後に、次のように String[] を渡すことができます。

intent.putExtra("quotes", quotes);

そして、これでそれを読んでください:

String[] quotes = extras.getStringArray("quotes");

それが役立つことを願っています!

添加

String 配列datosには null エントリが 1 つあります。変更しても自動的に更新されませんextras2。Fav を次のように書き換えます。

public class Fav extends Activity {
    public ArrayAdapter<String> lvAdapter;
    public ListView lv;

    String[] datos;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.faves);   

        // Check if extras is null, depending on implementation may need to check if Intent is null too
        Bundle extras = getIntent().getExtras();
        if(extras != null) 
            datos = extras.getStringArray("quotes");
        else {
            Log.w("Fav", "No string array passed, ListView will be empty!");
            datos = new String[] {""};
        }

        lvAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, datos);
        lv = (ListView) findViewById(R.id.list);
        lv.setAdapter(lvAdapter);
    }
}

もちろんputExtra("quotes", quotes)、最初のアクティビティで (私が投稿した) インテントを使用する必要があります。

于 2012-07-17T23:46:16.460 に答える