Cách sử dụng putExtra () và getExtra () cho dữ liệu chuỗi


318

Ai đó có thể vui lòng cho tôi biết chính xác làm thế nào để sử dụng getExtra()putExtra()cho ý định? Trên thực tế tôi có một biến chuỗi, nói str, lưu trữ một số dữ liệu chuỗi. Bây giờ, tôi muốn gửi dữ liệu này từ hoạt động này sang hoạt động khác.

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

và sau đó trong 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 
        }

    }

Tôi biết đó là câu hỏi rất cơ bản nhưng tiếc là tôi bị mắc kẹt ở đây. Xin vui lòng giúp đỡ.

Cảm ơn,

Chỉnh sửa: Ở đây, chuỗi mà tôi đang cố gắng chuyển từ màn hình này sang màn hình khác là động. Đó là tôi có một chỉnh sửa trong đó tôi nhận được chuỗi bất kỳ loại người dùng nào. Sau đó với sự giúp đỡ của myEditText.getText().toString(). Tôi nhận được giá trị nhập dưới dạng chuỗi sau đó tôi phải truyền dữ liệu này.


i.putExtra (strName, keyIdentifer); Câu lệnh này có biến strName trong khi bundle.getString ("strName") có Chuỗi "strName". Mục đích của nó.putExtra (khóa, giá trị) và aim.getExtras (). GetString (khóa); hãy chắc chắn rằng bạn đang sử dụng cùng một khóa và đặt.
seema

Câu trả lời:


416

Sử dụng cái này để "đặt" tập tin ...

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

Sau đó, để lấy giá trị, hãy thử một số thứ như:

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
mã "yetInstanceState ..." và "... getSerialiable" được sử dụng để xử lý các thay đổi định hướng? Nếu không, mã đó được sử dụng để làm gì?
AJW

Tôi đang sử dụng Android 3.0.1 và tôi phải sử dụng this.getActivity().getIntent().getExtras().
Tyler

Nếu bạn sử dụng PendingIntents, bạn cần sử dụng cờ "PendingIntent.FLAG_UPDATE_CURRENT": stackoverflow.com/a/29846408/2738240 Ý định = ý định mới (bối cảnh, MainActivity. Class); aim.putExtra ("button_id", 1); PendingIntent chờ đợiIntent = PendingIntent.getActivity (bối cảnh, 0, ý định, PendingIntent.FLAG_UPDATE_CURRENT); Lượt xem RemoteViews = RemoteViews mới (bối cảnh.getPackageName (), R.layout.my_test_widget); lượt xem.setOnClickPendingIntent (R.id.my_test_widget_button_1, cấp phátIntent);
Matthias Luh

69

Screen.java đầu tiên

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);
    }
});

Screen.java thứ hai

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

Phương pháp tốt nhất ...

Gửi năng lực

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

RecendingActivity

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

/// cách ngắn nhất để nhận dữ liệu ..

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

// Điều này đòi hỏi api 12. // tham số thứ hai là tùy chọn. Nếu keyName là null thì sử dụng defaultkeydữ liệu dưới dạng.


18

Đây là những gì tôi đã và đang sử dụng, hy vọng nó sẽ giúp được ai đó .. đơn giản và tình cảm.

gửi dữ liệu

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

lấy dữ liệu

    int mealId;

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

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

chúc mừng


1
Tôi vẫn phải tự nhắc nhở bản thân mình, bây giờ và sau đó, làm thế nào điều này được thực hiện đúng cách .. lol!
Sindri Þór

10

Nó rất dễ thực hiện intenttrong Android .. Bạn phải chuyển từ hoạt động này sang hoạt động khác, chúng tôi phải thực hiện hai phương pháp putExtra();getExtra();Bây giờ tôi sẽ chỉ cho bạn ví dụ ..

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

Bây giờ chúng ta phải lấy giá trị từ AnyKeyNametham số, đoạn mã được đề cập dưới đây sẽ giúp thực hiện điều này

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

Chúng tôi có thể dễ dàng đặt giá trị nhận từ Intentbất cứ nơi nào chúng tôi yêu cầu.


6

Một phụ lục nhỏ: bạn không phải tạo tên riêng cho khóa, android cung cấp các tên này, f.ex. Intent.EXTRA_TEXT. Sửa đổi câu trả lời được chấp nhận:

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

Sau đó, để lấy giá trị, hãy thử một số thứ như:

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

Ứng dụngActivity

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

Cập nhật trong lớp Ý định .

  • Sử dụng hasExtra()để kiểm tra nếu ý định có dữ liệu trên khóa.
  • Bạn có thể sử dụng getStringExtra()trực tiếp bây giờ .

Truyền dữ liệu

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

Lấy dữ liệu

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

Luôn đặt chìa khóa trong hằng số là cách thực hành tốt nhất.

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

Tại sao là PutExtraConstantsmột giao diện?
Big_Chair

@Big_Chair Bởi vì PutExtraConstantslớp chỉ chứa các hằng số ( public, static, final). Vì vậy, tốt hơn là sử dụng giao diện cho Hằng.
Khemraj

3

Đơn giản hơn

bên gửi

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

bên nhận

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

3

Đặt chuỗi trong đối tượng ý định

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

NextAcitvity trong phương thức onCreate lấy String

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

đó là phương pháp dễ dàng và ngắn


2

gửi

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

được

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

1

đặt chức năng

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

Đẩy dữ liệu

import android.content.Intent;

    ...

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

Các mã trên có thể là bên trong chính activity. " MyActivity.class" là thứ hai Activitychúng tôi muốn khởi chạy; nó phải được bao gồm rõ ràng trong AndroidManifest.xmltập tin của bạn .

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

Kéo dữ liệu

import android.os.Bundle;

    ...

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

Trong ví dụ này, đoạn mã trên sẽ nằm trong MyActivity.java tệp .

Gotchas

Phương pháp này chỉ có thể vượt qua strings. Vì vậy, hãy nói rằng bạn cần phải vượt qua một ArrayListđến bạnListActivity ; một cách giải quyết khác có thể là chuyển một chuỗi được phân tách bằng dấu phẩy và sau đó phân tách nó ở phía bên kia.

Các giải pháp thay thế

Sử dụng SharedPreferences


và điều gì xảy ra nếu tôi muốn truyền một chuỗi từ string.xml?
HB.

1

Đơn giản, trong hoạt động đầu tiên-

    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);
          }
    });

Trong hoạt động thứ hai-

    @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);
}

Bạn có thể thêm điều kiện if / other nếu bạn muốn.


1

Tại FirstScreen.java

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

Tại SecondScreen.java

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

Chào mừng đến với SO! Vui lòng chỉnh sửa câu trả lời của bạn và giải thích một chút tại sao và làm thế nào để giải quyết vấn đề. Để được hướng dẫn thêm, hãy xem stackoverflow.com/help/how-to-answer
B - rian

0

đặt chuỗi trước

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

lấy nó sau đó

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

đó là tất cả ;)


-1

Bạn chỉ có thể sử dụng biến tĩnh để lưu trữ chuỗi edittext của mình và sau đó sử dụng biến đó trong lớp khác. Hy vọng điều này sẽ giải quyết vấn đề của bạn


Bạn có thể nhưng bạn không nên :-)
Blundell
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.