【问题标题】:Displaying ArrayList to user向用户显示 ArrayList
【发布时间】:2019-08-11 20:36:35
【问题描述】:

我有两个活动,一个是 MainActivity,另一个是 Main2Activity。 在 Main2Activity 中,我在 TextView 中获取用户的输入并将其存储在 ArrayList 中,现在我想将此 ArrayList 发送到 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/连接服务:RemoteException 抓到试图为 NetworkRequest [ id=81 发送回调消息, legacyType=-1,[功能:INTERNET&NOT_RESTRICTED&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:无法启动活动 ComponentInfo{com.example.to_doapp/com.example.to_doapp.MainActivity}: java.lang.NullPointerException:尝试调用虚拟方法 'java.io.Serializable android.os.Bundle.getSerializable(java.lang.String)' 在空对象上 参考 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2534) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2614) 在 android.app.ActivityThread.access$800(ActivityThread.java:178) 在 android.app.ActivityThread$H.handleMessage(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.Method.invoke(本机方法) 在 java.lang.reflect.Method.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.String)' 在空对象上 参考 在 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.handleMessage(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.Method.invoke(本机方法) 在 java.lang.reflect.Method.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 == 空 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 authMethod=ECDHE_ECDSA 03-21 07:56:03.536 29645-29672/? E/NativeCrypto: ssl=0xaf83da00 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 authMethod=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) 从 WAL 文件中恢复 63 帧 /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/Wifi状态机: ScanModeState (when=-58ms what=131167!CMD_SCREEN_STATE_CHANGED{ 当=-58ms 什么=131167 目标=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.536 763-823/? E/WifiStateMachine: DriverStartedState (当=-58ms 什么=131167!CMD_SCREEN_STATE_CHANGED{ 当=-58ms 什么=131167 目标=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.536 763-823/? E/Wifi状态机: SupplicantStartedState(当=-59ms 什么=131167!CMD_SCREEN_STATE_CHANGED{ 当=-59ms 什么=131167 目标=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.537 763-823/? E/WifiStateMachine: DefaultState (when=-60ms 什么=131167!CMD_SCREEN_STATE_CHANGED{ 当=-60ms 什么=131167 目标=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/Wifi状态机: handleScreenStateChanged 退出:假 03-21 07:56:55.548 763-823/? E/WifiStateMachine: ScanModeState (当=-4ms 什么=131154CMD_ENABLE_RSSI_POLL{ 当=-4ms 什么=131154 目标=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.550 763-823/? E/WifiStateMachine: DriverStartedState (当=-6ms 什么=131154CMD_ENABLE_RSSI_POLL{ 当=-6ms 什么=131154 目标=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.550 763-823/? E/WifiStateMachine: SupplicantStartedState (当=-6ms 什么=131154CMD_ENABLE_RSSI_POLL{ 当=-6ms 什么=131154 目标=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.551 763-823/? E/WifiStateMachine: DefaultState (when=-6ms 什么=131154CMD_ENABLE_RSSI_POLL{ 当=-7ms 什么=131154 目标=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.551 763-823/? E/WifiStateMachine: ScanModeState (当=-6ms 什么=131158 arg1=1CMD_SET_SUSPEND_OPT_ENABLED{ 当=-6ms 什么=131158 arg1=1 目标=com.android.internal.util.StateMachine$SmHandler } 1 0 03-21 07:56:55.552 763-823/? E/WifiStateMachine: DriverStartedState (当=-7ms 什么=131158 arg1=1CMD_SET_SUSPEND_OPT_ENABLED{ 当=-7ms 什么=131158 arg1=1 目标=com.android.internal.util.StateMachine$SmHandler } 1 0 03-21 07:56:55.574 763-823/? E/Wifi状态机: setSuspendOptimizationsNative: 4 真 - 想要真 堆栈:setSuspendOptimizationsNative - access$16400 - processMessage - 处理信息 03-21 07:56:55.575 763-823/? E/Wifi状态机: setSuspendOptimizationsNative 做 4 真 堆栈:setSuspendOptimizationsNative - access$16400 - processMessage - 处理信息 03-21 07:56:55.585 763-823/? E/native: 暂停 true 03-21 07:56:55.599 763-823/? E/WifiStateMachine: 扫描模式状态 (当=-53ms 什么=131248M_CMD_NOTIFY_SCREEN_OFF{ 当=-53ms 什么=131248 目标=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.599 763-823/? E/WifiStateMachine: DriverStartedState (当=-54ms 什么=131248M_CMD_NOTIFY_SCREEN_OFF{ 当=-54ms 什么=131248 目标=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.600 763-823/? E/WifiStateMachine: SupplicantStartedState (当=-54ms 什么=131248M_CMD_NOTIFY_SCREEN_OFF{ 当=-55ms 什么=131248 目标=com.android.internal.util.StateMachine$SmHandler } 0 0 03-21 07:56:55.601 763-823/? E/WifiStateMachine: DefaultState (when=-55ms 什么=131248M_CMD_NOTIFY_SCREEN_OFF{ 当=-55ms 什么=131248 目标=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/Sensors: new setDelay handle(0),ns(20000000)m, error(0), 索引(2) 03-21 07:57:00.388 763-1406/?电子/传感器:handleToDriver 句柄(0)03-21 07:57:28.639 1673-13747/? E/WakeLock:GCM_HB_ALARM 在没有匹配的获取的情况下发布!

【问题讨论】:

  • 在此处发布您的崩溃/错误/异常。有关异常详细信息,请参阅您的 logcat。
  • 任何更新????
  • 约翰乔我更新了你所说的一切仍然无法正常工作:(
  • @shalininegi 不工作是什么意思?同样的错误?
  • John Joe 先生,应用程序又崩溃了!! :(

标签: android android-intent arraylist


【解决方案1】:

您的应用正在崩溃,因为来自日志:

java.lang.NullPointerException:尝试在 com.example.to_doapp.MainActivity.onCreate 的空对象引用上调用虚拟方法“java.io.Serializable android.os.Bundle.getSerializable(java.lang.String)” (MainActivity.java:51)

在 Main2Activity 中的方法 public void BackMain ( View view )(建议根据 Java naming conventions 将方法重命名为“backMain”)中,您有 intent.putExtra("bundle",args); 其中作为第一个参数的额外数据的键(或名称)是“捆”。但是,当您从 MainActivity 获取这些额外数据时,您有 Bundle args = intent.getBundleExtra("BUNDLE");,其中捆绑的名称是“捆绑”,它与“捆绑”不匹配,因此它将返回 null。您需要为要通过 Intent 从一个 Activity 传递到另一个的额外数据(在本例中为 Bundle)使用相同的名称。

【讨论】:

    【解决方案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");
    

    【讨论】:

      猜你喜欢
      • 2013-07-23
      • 2010-12-23
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2011-03-02
      • 2013-01-23
      相关资源
      最近更新 更多