Отображение списка массивов пользователю

#android #android-intent #arraylist

#Android #android-намерение #список массивов

Вопрос:

У меня есть два действия, одно из которых — MainActivity, а другое — Main2Activity. В Main2Activity я принимаю входные данные от пользователя в TextView и сохраняю их в ArrayList, теперь я хочу отправить этот список массивов в MainActivity, где я буду отображать его пользователю. Я использовал намерение. Но мое приложение выходит из строя. Ниже приведены два моих действия с кодом Mainactivity

     package com.example.to_doapp;

   import android.content.Intent;
   import android.os.Bundle;
   import android.support.design.widget.FloatingActionButton;
   import android.support.design.widget.Snackbar;
   import android.support.v7.app.AppCompatActivity;
   import android.support.v7.widget.Toolbar;
   import android.view.View;
   import android.view.Menu;
   import android.view.MenuItem;
   import android.widget.LinearLayout;
   import android.widget.TextView;
   import android.widget.Toast;
   import java.io.Serializable;
   import java.util.ArrayList;

   public class MainActivity extends AppCompatActivity {

   public void onclick (View view  )
   {

        Intent intent = new Intent(getApplicationContext(), 
            Main2Activity.class );
        startActivity(intent);
  }

@Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    Intent intent = getIntent();
    //Toast.makeText (this,intent.getStringExtra("task"), Toast.LENGTH_SHORT ).show() ;

    Bundle args = intent.getBundleExtra("BUNDLE");
     ArrayList< String> object  =  (ArrayList<String>) args.getSerializable("ARRAYLIST");
    LinearLayout lView = new LinearLayout(this);
    TextView myText= new TextView(this);
    lView.addView(myText);
    for (int i=0; i<object.size();i  ){
        myText.append(object.get(i));
        myText.append("n");
    }
    setContentView(lView);

 }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;       }

    return super.onOptionsItemSelected(item);
  }
  }
  

Main2Activity — это
пакет com.example.to_doapp;

     import android.content.Intent;
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.widget.EditText;
    import java.io.Serializable;
    import java.util.ArrayList;

    public class Main2Activity extends AppCompatActivity {

    ArrayList< String> arr = new ArrayList < String > ();
    public void BackMain ( View view )
    {
        Intent intent = new Intent( getApplicationContext() 
           ,MainActivity.class ) ;
       Bundle args = new Bundle();
        EditText editText = ( EditText) findViewById( R.id.editText3) ;
        String s = editText.getText().toString();
       arr.add ( s ) ;
       args.putSerializable("ARRAYLIST",(Serializable)arr);
        intent.putExtra("bundle",args);
       startActivity(intent);
     }

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = findViewById(R.id.fab);
         fab.setOnClickListener(new View.OnClickListener() {
         @Override
        public void onClick(View view) {
        Snackbar.make(view, "Replace with your own action", 
            Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
       });
       }

       }
  

Мой Logcat показывает что-то вроде этого

03-21 07:55:00.407 763-826/? E / ConnectivityService: поймано исключение RemoteException при попытке отправить сообщение об обратном вызове для networkRequest [ id=81, legacyType =-1, [ Возможности: INTERNET amp; NOT_RESTRICTED amp;TRUSTED] ] 03-21 07:55:58.292 29529-29529/? E / MPlugin: неподдерживаемый класс: com.mediatek.common.telephony.IOnlyOwnerSimSupport 03-21 07:56:01.380 29645-29672 /? E /MPlugin: неподдерживаемый класс: com.mediatek.common.telephony.IOnlyOwnerSimSupport 03-21 07:56:01.577 29624-29624/com.example.to_doapp E /AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.example.to_doapp, PID: 29624 java.lang.RuntimeException: Не удается запустить activity ComponentInfo{com.example.to_doapp/com.example.to_doapp.MainActivity}: java.lang.Исключение NullPointerException: попытка вызвать виртуальный метод ‘java.io.Serializable android.os.Bundle.getSerializable (java.lang.Строка)’ для ссылки на нулевой объект в android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 2534) в android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2614) в android.app.ActivityThread.access800 долларов США (ActivityThread.java: 178) в Android.app.ActivityThread $H.Обработайте сообщение (ActivityThread.java: 1470) в android.os.Handler.DispatchMessage(Handler.java:111) в android.os.Looper.loop(Looper.java:194) в android.app.ActivityThread.main (ActivityThread.java:5643) в java.lang.reflect.Метод.invoke (собственный метод) на java.lang.reflect.Метод.invoke (Method.java: 372) на com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:755), вызванный: java.lang.Исключение NullPointerException: попытка вызвать виртуальный метод ‘java.io.Serializable android.os.Bundle.getSerializable (java.lang.Строка)’ для ссылки на нулевой объект в com.example.to_doapp.MainActivity.onCreate(MainActivity.java: 51) в android.app.Activity.performCreate(Activity.java:6100) в android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112) в android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 2481) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2614) на Android.app.ActivityThread.access $ 800 (ActivityThread.java: 178) на android.app.ActivityThread $ H.Обработка сообщения (ActivityThread.java: 1470) на android.os.Handler.DispatchMessage (Handler.java:111) на android.os.Looper.loop (Looper.java: 194) на android.app.ActivityThread.main (ActivityThread.java:5643) на java.lang.reflect .Метод.invoke (собственный метод) на java.lang.reflect.Метод.invoke(Method.java: 372) на com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:755) 03-21 07:56:01.787 29645-29670/? E / WifiManager: mWifiServiceMessenger == null 03-21 07:56:03.275 29764-29764/? E /MPlugin: неподдерживаемый класс: com.mediatek.common.telephony.IOnlyOwnerSimSupport 03-21 07:56:03.390 29645-29671 /? E / NativeCrypto: ssl =0xb47ac800 cert_verify_callback x509_store_ctx=0x9fa343e0 arg =0x0 03-21 07:56:03.390 29645-29671/? E / NativeCrypto: ssl =0xb47ac800 cert_verify_callback, вызывающий метод аутентификации verifyCertificateChain=ECDHE_ECDSA 03-21 07:56:03.536 29645-29672/? E / NativeCrypto: ssl=0xaf83da00 cert_verify_callback cert_verify_callback x509_store_ctx=0x9f930460 arg=0x0 03-21 07:56:03.536 29645-29672/? E / NativeCrypto: ssl =0xaf83da00 cert_verify_callback, вызывающий метод аутентификации verifyCertificateChain=ECDHE_ECDSA 03-21 07:56:03.584 29787-29787/? E / WifiManager: mWifiServiceMessenger == null 03-21 07:56:04.382 29787-29787 /? E /MPlugin: неподдерживаемый класс: com.mediatek.common.telephony.IOnlyOwnerSimSupport 03-21 07:56:04.743 29838-29838 /? E / MPlugin: неподдерживаемый класс: com.mediatek.common.telephony.IOnlyOwnerSimSupport 03-21 07:56:11.598 29645-29681 /? E / Finsky: [4373] fng.a(20): Не удалось создать селектор: /storage/sdcard0/Download/marketenvs.csv: не удалось открыть: ENOENT (нет такого файла или каталога) 03-21 07:56:11.772 29645-29724/? E / SQLiteLog: (283) восстановлено 63 кадра из файла WAL /data/data/com.android.vending/databases/phenotype.db-wal 03-21 07:56:55.470 763-763/? E / WifiTrafficPoller: ложный токен ENABLE_TRAFFIC_STATS_POLL 226 03-21 07:56:55.535 763-823/? E / WifiStateMachine: ScanModeState (когда =-58 мс, что = 131167!CMD_SCREEN_STATE_CHANGED{ когда =-58 мс, что = 131167 target=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.536 763-823/? E / WifiStateMachine: DriverStartedState (когда =-58 мс, что = 131167!CMD_SCREEN_STATE_CHANGED{ когда =-58 мс, что = 131167 target=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.536 763-823/? E / WifiStateMachine: Startedstate пользователя (когда =-59 мс, что = 131167!CMD_SCREEN_STATE_CHANGED{ когда =-59 мс, что = 131167 target=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.537 763-823/? E / WifiStateMachine: состояние по умолчанию (когда =-60 мс, что = 131167!CMD_SCREEN_STATE_CHANGED{ когда =-60 мс, что = 131167 target=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.547 763-823/? E / WifiStateMachine: cancelDelayedScan -> 228 03-21 07:56:55.547 763-823/? E / WifiStateMachine: handleScreenStateChanged Выход: false 03-21 07:56:55.548 763-823/? E / WifiStateMachine: ScanModeState (когда =-4 мс what=131154CMD_ENABLE_RSSI_POLL{ когда =-4 мс what = 131154 target=com.android.internal.util.StateMachine$ SmHandler } 0 0 03-21 07:56:55.550 763-823/? E / WifiStateMachine: DriverStartedState (когда =-6 мс what=131154CMD_ENABLE_RSSI_POLL{ когда =-6 мс what = 131154 target=com.android.internal.util.StateMachine $ SmHandler } 0 0 03-21 07:56:55.550 763-823/? E / WifiStateMachine: запрашивающее STARTEDSTATE (когда =-6 мс what=131154CMD_ENABLE_RSSI_POLL{ когда =-6 мс what = 131154 target=com.android.internal.util.StateMachine$ SmHandler } 0 0 03-21 07:56:55.551 763-823/? E / WifiStateMachine: DefaultState (когда =-6 мс what=131154CMD_ENABLE_RSSI_POLL{ когда =-7 мс what = 131154 target=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.551 763-823/? E / WifiStateMachine: ScanModeState (когда =-6 мс what= 131158 arg1=1CMD_SET_SUSPEND_OPT_ENABLED{ когда=-6 мс what = 131158 arg1= 1 target=com.android.internal.util.StateMachine$ SmHandler } 1 0 03-21 07:56:55.552 763-823/? E / WifiStateMachine: DriverStartedState (когда =-7 мс what= 131158 arg1=1CMD_SET_SUSPEND_OPT_ENABLED{ когда =-7 мс what = 131158 arg1= 1 target=com.android.internal.util.StateMachine$ SmHandler } 1 0 03-21 07:56:55.574 763-823/? E / WifiStateMachine: setSuspendOptimizationsNative: 4 true -требуется истинный стек: setSuspendOptimizationsNative — доступ за 16400 долларов — ProcessMessage — processMsg 03-21 07:56:55.575 763-823/? E / WifiStateMachine: setSuspendOptimizationsNative сделай это 4 true stack: setSuspendOptimizationsNative — доступ к 16400 долларов США — ProcessMessage — processMsg 03-21 07:56:55.585 763-823 /? E / native: приостанавливать ли true 03-21 07:56:55.599 763-823 /? E / WifiStateMachine: ScanModeState (когда =-53 мс what=131248M_CMD_NOTIFY_SCREEN_OFF{ когда=-53 мс what = 131248 target=com.android.internal.util.StateMachine$ SmHandler } 0 0 03-21 07:56:55.599 763-823/? E / WifiStateMachine: DriverStartedState (когда =-54 мс what=131248M_CMD_NOTIFY_SCREEN_OFF{ когда=-54 мс what = 131248 target=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.600 763-823/? E / WifiStateMachine: запрашивающее STARTEDSTATE (когда =-54 мс what=131248M_CMD_NOTIFY_SCREEN_OFF{ когда =-55 мс what = 131248 target=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.601 763-823/? E / WifiStateMachine: DefaultState (когда =-55 мс what=131248M_CMD_NOTIFY_SCREEN_OFF{ когда =-55 мс what = 131248 target=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:56.504 1773-29908/? E / MPlugin: неподдерживаемый класс: com.mediatek.common.telephony.IOnlyOwnerSimSupport 03-21 07:56:56.635 763-779 /? E / Датчики: дескриптор handleToDriver(0) 03-21 07:56:56.636 763-779/? E / Датчики: дескриптор handleToDriver(0) 03-21 07:56:56.638 763-779 /? E / Датчики: новый дескриптор setDelay (0), ns (20000000) m, ошибка (0), индекс(2) 03-21 07:57:00.388 763-1406/? E / Датчики: дескриптор handleToDriver(0) 03-21 07:57:28.639 1673-13747/? E / WakeLock: выпуск GCM_HB_ALARM без соответствующего приобретения!

Комментарии:

1. Опубликуйте свой сбой / ошибку / исключение здесь. смотрите ваш logcat для получения подробной информации об исключении.

2. есть обновления????

3. Джон Джо, я обновил все, что ты сказал, что все еще не работает : (

4. @shalininegi не работает, значит? та же ошибка?

5. Джон Джо, сэр, приложение снова выходит из строя !! 🙁

Ответ №1:

Ваше приложение выходит из строя, потому что из журнала:

java.lang.Исключение NullPointerException: попытка вызвать виртуальный метод ‘java.io.Serializable android.os.Bundle.getSerializable (java.lang.Строка)’ в нулевой ссылке на объект в com.example.to_doapp.MainActivity.onCreate(MainActivity.java:51)

В вашем методе public void BackMain ( View view ) (предложите переименовать метод в «backMain» в соответствии с соглашениями Java об именовании) в Main2Activity у вас есть intent.putExtra("bundle",args); где ключом (или именем) дополнительных данных, которые являются первым аргументом, является «bundle». Однако, когда вы получаете эти дополнительные данные из MainActivity, у вас есть Bundle args = intent.getBundleExtra("BUNDLE"); где имя пакета «BUNDLE», которое не соответствует «bundle», поэтому оно вернет null. Вам нужно использовать то же имя для дополнительных данных (в данном случае a Bundle ), которые вы хотите передать через Intent из одного действия в другое.

Ответ №2:

Чтобы передать объект ArrayList другому действию, используйте этот код.

В Main2Activity

 ArrayList<String> arr = new ArrayList<String>();
EditText editText = ( EditText) findViewById( R.id.editText3) ;
String s = editText.getText().toString();
arr.add (s) ;
intent.putExtra("mylist", arr);
  

В MainActivity

 ArrayList<String> object = (ArrayList<String>)getIntent().getSerializableExtra("mylist");