วิธีใช้ putExtra () และ getExtra () สำหรับข้อมูลสตริง


318

ใครช่วยกรุณาบอกฉันว่าวิธีการใช้งานgetExtra()และputExtra()เพื่อความตั้งใจ? ที่จริงฉันมีตัวแปรสตริงพูด str ซึ่งเก็บข้อมูลสตริงบางอย่าง ตอนนี้ฉันต้องการส่งข้อมูลนี้จากกิจกรรมหนึ่งไปยังกิจกรรมอื่น

  Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
  String keyIdentifer  = null;
  i.putExtra(strName, keyIdentifer );

และจากนั้นใน SecondScreen.java

 public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.table);
        TextView userName = (TextView)findViewById(R.id.userName);
        Bundle bundle = getIntent().getExtras();

        if(bundle.getString("strName")!= null)
        {
            //TODO here get the string stored in the string variable and do 
            // setText() on userName 
        }

    }

ฉันรู้ว่ามันเป็นคำถามพื้นฐาน แต่น่าเสียดายที่ฉันติดอยู่ที่นี่ กรุณาช่วย.

ขอบคุณ

แก้ไข: นี่สตริงที่ฉันพยายามที่จะผ่านจากหน้าจอหนึ่งไปยังอีกหน้าจอเป็นแบบไดนามิก นั่นคือฉันมี editText ที่ฉันได้รับสตริงผู้ใช้ประเภทใด myEditText.getText().toString()จากนั้นด้วยความช่วยเหลือของ ฉันได้รับค่าที่ป้อนเป็นสตริงจากนั้นฉันต้องส่งข้อมูลนี้


i.putExtra (strName, keyIdentifer); คำสั่งนี้มีตัวแปร strName ในขณะที่ bundle.getString ("strName") มีสตริง "strName" จุดประสงค์ของมัน ตรวจสอบให้แน่ใจว่าคุณกำลังใช้รหัสเดียวกันในการย้ายและรับ
seema

คำตอบ:


416

ใช้สิ่งนี้เพื่อ "วาง" ไฟล์ ...

Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
String strName = null;
i.putExtra("STRING_I_NEED", strName);

จากนั้นในการดึงค่าลองทำสิ่งต่อไปนี้:

String newString;
if (savedInstanceState == null) {
    Bundle extras = getIntent().getExtras();
    if(extras == null) {
        newString= null;
    } else {
        newString= extras.getString("STRING_I_NEED");
    }
} else {
    newString= (String) savedInstanceState.getSerializable("STRING_I_NEED");
}

10
รหัส "saveInstanceState ... " และ "... getSerialiable" ใช้เพื่อจัดการการเปลี่ยนแปลงการวางแนวอย่างไร ถ้าไม่ใช้รหัสนั้นเพื่ออะไร
AJW

ฉันโดยใช้ Android 3.0.1 this.getActivity().getIntent().getExtras()และฉันได้ใช้
ไทเลอร์

หากคุณใช้ PendingIntents คุณต้องใช้การตั้งค่าสถานะ "PendingIntent.FLAG_UPDATE_CURRENT": stackoverflow.com/a/29846408/2738240 เจตนาเจตนา = เจตนาใหม่ (บริบท MainActivity.class); intent.putExtra ("button_id", 1); PendingIntent pendingIntent = PendingIntent.getActivity (บริบท, 0, เจตนา, PendingIntent.FLAG_UPDATE_CURRENT); มุมมอง RemoteViews = RemoteViews ใหม่ (context.getPackageName (), R.layout.my_test_widget); views.setOnClickPendingIntent (R.id.my_test_widget_button_1, pendingIntent);
Matthias Luh

69

หน้าจอแรก. java

text=(TextView)findViewById(R.id.tv1);
edit=(EditText)findViewById(R.id.edit);
button=(Button)findViewById(R.id.bt1);

button.setOnClickListener(new OnClickListener() {
    public void onClick(View arg0) {
        String s=edit.getText().toString();

        Intent ii=new Intent(MainActivity.this, newclass.class);
        ii.putExtra("name", s);
        startActivity(ii);
    }
});

Second Screen.java

public class newclass extends Activity
{
    private TextView Textv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.intent);
        Textv = (TextView)findViewById(R.id.tv2);
        Intent iin= getIntent();
        Bundle b = iin.getExtras();

        if(b!=null)
        {
            String j =(String) b.get("name");
            Textv.setText(j);
        }
    }
}

52

วิธีที่ดีที่สุด ...

SendingActivity

Intent intent = new Intent(SendingActivity.this, RecievingActivity.class);
intent.putExtra("keyName", value);  // pass your values and retrieve them in the other Activity using keyName
startActivity(intent);

RecievingActivity

 Bundle extras = intent.getExtras();
    if(extras != null)
    String data = extras.getString("keyName"); // retrieve the data using keyName 

/// วิธีที่สั้นที่สุดในการรับข้อมูล ..

String data = getIntent().getExtras().getString("keyName","defaultKey");

// ต้องใช้ api 12 // พารามิเตอร์ตัวที่สองเป็นทางเลือก หาก keyName เป็นโมฆะให้ใช้defaultkeyเป็นข้อมูล


18

นี่คือสิ่งที่ฉันใช้มาโดยหวังว่ามันจะช่วยให้ใครบางคน .. ง่ายและอารมณ์ดี

ส่งข้อมูล

    intent = new Intent(getActivity(), CheckinActivity.class);
    intent.putExtra("mealID", meal.Meald);
    startActivity(intent);

รับข้อมูล

    int mealId;

    Intent intent = getIntent();
    Bundle bundle = intent.getExtras();

    if(bundle != null){
        mealId = bundle.getInt("mealID");
    }

ไชโย!


1
ฉันยังต้องเตือนตัวเองตอนนี้แล้วสิ่งนี้ทำถูกต้องยังไง .. lol!
Sindri Þór

10

มันง่ายมากที่จะนำไปใช้intentใน Android .. คุณต้องย้ายจากกิจกรรมหนึ่งไปยังอีกกิจกรรมหนึ่งเราต้องใช้สองวิธีputExtra();และgetExtra();ตอนนี้ฉันกำลังแสดงตัวอย่างให้คุณ ..

    Intent intent = new Intent(activity_registration.this, activity_Login.class);
                intent.putExtra("AnyKeyName", Email.getText().toString());  // pass your values and retrieve them in the other Activity using AnyKeyName
                        startActivity(intent);

ตอนนี้เราต้องได้รับค่าจากAnyKeyNameพารามิเตอร์รหัสที่กล่าวถึงด้านล่างจะช่วยในการทำเช่นนี้

       String data = getIntent().getExtras().getString("AnyKeyName");
        textview.setText(data);

เราสามารถกำหนดมูลค่าการรับจากIntentทุกที่ที่เราต้องการได้อย่างง่ายดาย


6

ภาคผนวกเล็ก ๆ : คุณไม่จำเป็นต้องสร้างชื่อของคุณเองสำหรับกุญแจ, android ให้สิ่งเหล่านี้, f.ex Intent.EXTRA_TEXT. การแก้ไขคำตอบที่ยอมรับได้:

Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
String strName = null;
i.putExtra(Intent.EXTRA_TEXT, strName);

จากนั้นในการดึงค่าลองทำสิ่งต่อไปนี้:

String newString;
Bundle extras = getIntent().getExtras();
if(extras == null) {
    newString= null;
} else {
    newString= extras.getString(Intent.EXTRA_TEXT);
}

4
Intent intent = new Intent(view.getContext(), ApplicationActivity.class);
                        intent.putExtra("int", intValue);
                        intent.putExtra("Serializable", object);
                        intent.putExtra("String", stringValue);
                        intent.putExtra("parcelable", parObject);
                        startActivity(intent);

ApplicationActivity

Intent intent = getIntent();
Bundle bundle = intent.getExtras();

if(bundle != null){
   int mealId = bundle.getInt("int");
   Object object = bundle.getSerializable("Serializable");
   String string = bundle.getString("String");
   T string = <T>bundle.getString("parcelable");
}

4

อัพเดทในคลาสIntent

  • ใช้ hasExtra()สำหรับตรวจสอบว่าเจตนามีข้อมูลในคีย์หรือไม่
  • คุณสามารถใช้งานgetStringExtra()ได้โดยตรง

ผ่านข้อมูล

intent.putExtra(PutExtraConstants.USER_NAME, "user");

รับข้อมูล

String userName;
if (getIntent().hasExtra(PutExtraConstants.USER_NAME)) {
    userName = getIntent().getStringExtra(PutExtraConstants.USER_NAME);
}

ใส่คีย์ในค่าคงที่เสมอเพื่อเป็นแนวปฏิบัติที่ดีที่สุด

public interface PutExtraConstants {
    String USER_NAME = "USER_NAME";
}

ทำไมถึงต้องPutExtraConstantsมี interface
Big_Chair

@Big_Chair เพราะPutExtraConstantsชั้นมีค่าคงที่เท่านั้น ( public, static, final) ดังนั้นจะเป็นการดีกว่าถ้าใช้อินเตอร์เฟสสำหรับค่าคงที่
Khemraj

3

ง่ายขึ้น

ด้านผู้ส่ง

Intent i = new Intent(SourceActiviti.this,TargetActivity.class);
i.putExtra("id","string data");
startActivity(i)

ด้านรับ

Intent i = new Intent(SourceActiviti.this,TargetActivity.class);
String strData = i.getStringExtra("id");

3

ใส่สตริงในวัตถุแสดงเจตนา

  Intent intent = new Intent(FirstActivity.this,NextAcitivity.class);
  intent.putExtra("key",your_String);
  StartActivity(intent);

NextAcitvity ใน onCreate วิธีการรับ String

String my_string=getIntent().getStringExtra("key");

นั่นเป็นวิธีที่ง่ายและสั้น


2

ส่ง

startActivity(new Intent(First.this, Secend.class).putExtra("key",edit.getText.tostring));

ได้รับ

String myData = getIntent.getStringExtra("key");

1

ใส่ฟังก์ชั่น

etname=(EditText)findViewById(R.id.Name);
        tvname=(TextView)findViewById(R.id.tvName);

        b1= (ImageButton) findViewById(R.id.Submit);

        b1.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                String s=etname.getText().toString();

                Intent ii=new Intent(getApplicationContext(), MainActivity2.class);
                ii.putExtra("name", s);
                Toast.makeText(getApplicationContext(),"Page 222", Toast.LENGTH_LONG).show();
                startActivity(ii);
            }
        });



getfunction 

public class MainActivity2 extends Activity {
    TextView tvname;
    EditText etname;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activity2);
        tvname = (TextView)findViewById(R.id.tvName);
        etname=(EditText)findViewById(R.id.Name);
        Intent iin= getIntent();
        Bundle b = iin.getExtras();

        if(b!=null)
        {

          String j2 =(String) b.get("name");

etname.setText(j2);
            Toast.makeText(getApplicationContext(),"ok",Toast.LENGTH_LONG).show();
        }
    }

1

พุชข้อมูล

import android.content.Intent;

    ...

    Intent intent = 
        new Intent( 
            this, 
            MyActivity.class );
    intent.putExtra( "paramName", "paramValue" );
    startActivity( intent );

activityรหัสข้างต้นอาจจะอยู่ในหลัก " MyActivity.class" เป็นครั้งที่สองที่Activityเราต้องการเปิดตัว; จะต้องรวมไว้ในAndroidManifest.xmlไฟล์ของคุณอย่างชัดเจน

<activity android:name=".MyActivity" />

ดึงข้อมูล

import android.os.Bundle;

    ...

    Bundle extras = getIntent().getExtras();
    if (extras != null)
    {
        String myParam = extras.getString("paramName");
    }
    else
    {
        //..oops!
    }

ในตัวอย่างนี้รหัสด้านบนจะอยู่ในMyActivity.javaไฟล์ของคุณ

gotchas

stringsวิธีนี้เท่านั้นที่สามารถผ่าน สมมุติว่าคุณต้องส่งArrayListต่อให้คุณListActivity ; วิธีแก้ปัญหาที่เป็นไปได้คือการส่งผ่านสตริงที่คั่นด้วยเครื่องหมายจุลภาคแล้วแยกอีกด้านหนึ่ง

โซลูชั่นทางเลือก

ใช้ SharedPreferences


และถ้าฉันต้องการส่งสตริงจาก string.xml
HB

1

เรียบง่ายในกิจกรรมแรก -

    EditText name= (EditText) findViewById(R.id.editTextName);
    Button button= (Button) findViewById(R.id.buttonGo);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(MainActivity.this,Main2Activity.class);
            i.putExtra("name",name.getText().toString());
           startActivity(i);
          }
    });

ในกิจกรรมที่สอง -

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    TextView t = (TextView) findViewById(R.id.textView);
    Bundle bundle=getIntent().getExtras();
    String s=bundle.getString("name");
    t.setText(s);
}

คุณสามารถเพิ่มเงื่อนไขอื่น ๆ ได้หากต้องการ


1

ที่ FirstScreen.java

    Intent intent = new Intent(FirstScreen.this, SecondScreen.class);
    String keyIdentifier = null;
    intent.putExtra(strName, keyIdentifier);

ที่ SecondScreen.java

    String keyIdentifier;
    if (savedInstanceState != null)
        keyIdentifier= (String) savedInstanceState.getSerializable(strName);
    else
        keyIdentifier = getIntent().getExtras().getString(strName);

ยินดีต้อนรับสู่ SO! โปรดแก้ไขคำตอบของคุณและอธิบายเหตุผลและวิธีแก้ปัญหาเล็กน้อย สำหรับคำแนะนำเพิ่มเติมโปรดดูstackoverflow.com/help/how-to-answer
B - rian

0

ใส่สตริงก่อน

Intent secondIntent = new Intent(this, typeof(SecondActivity));
            secondIntent.PutExtra("message", "Greetings from MainActivity");

เรียกมันหลังจากนั้น

var message = this.Intent.GetStringExtra("message");

นั่นคือทั้งหมด;)


-1

คุณสามารถใช้ตัวแปรแบบคงที่เพื่อเก็บสตริงของ edittext ของคุณแล้วใช้ตัวแปรนั้นในคลาสอื่น หวังว่านี่จะช่วยแก้ปัญหาของคุณได้


คุณทำได้แต่คุณไม่ควร :-)
Blundell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.