#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");