Android에서 의도적으로 추가 데이터를 얻는 방법은 무엇입니까?


749

한 활동 (의도)에서 다른 활동으로 데이터를 보내려면 어떻게해야합니까?

이 코드를 사용하여 데이터를 보냅니다.

Intent i=new Intent(context,SendMessage.class);
i.putExtra("id", user.getUserAccountId()+"");
i.putExtra("name", user.getUserFullName());
context.startActivity(i);

82
Java 쪽 참고 : 정수 (특히 예를 들어 목적)를 정수화하는 것은 결코 좋은 생각이 아니며, 불행하게도 java에서 int를 문자열로 변환하는 좋은 빠른 방법으로 자주 간주 user.getUserAccountId()+""됩니다. 수집합니다. 사용을 고려 String.valueOf(user.getUserAccountId), 또는 Integer.toString(user.getUserAccountId)대신.
pkk

5
@Andrew S 웹이 아닙니까? 이것은 "의도에서 데이터를 얻는"에 대한 최고의 결과입니다
McGuile

@AndrewS 나는 McGuile에 동의합니다. 또한이 질문은 얼마 전에 게시되었으므로 대답을 찾기가 쉽지 않았습니다. 그리고 비슷한 질문이 아직 SO에 게시되지 않았다면 유효한 게시물이었습니다.
0x 커서

답변:


1211

먼저, getIntent()방법을 사용하여 활동을 시작한 의도를 얻으십시오 .

Intent intent = getIntent();

추가 데이터가 문자열로 표시되면 intent.getStringExtra(String name)method 를 사용할 수 있습니다 . 귀하의 경우 :

String id = intent.getStringExtra("id");
String name = intent.getStringExtra("name");

6
어디서 부터이 모든 방법을 할 수 있습니까 ??
Adham

46
@adham : onCreate 내에서 활동중인 경우, getIntent().getStringExtra("id");ID 문자열을 얻기 위해 전화 합니다
ccheneson

1
getIntent()메소드 를 호출하여 활동을 시작한 의도를 얻을 수 있습니다 . 답변을 업데이트했습니다.
Malcolm

1
@Eatlon 특정 라이브러리에 문제가있는 경우 별도의 질문을 작성해야합니다.
Malcolm

1
@MelColm getExtra (). getString과 getStringExtra ()의 차이점은 무엇입니까?
Amit Tripathi

188

받는 활동에서

Bundle extras = getIntent().getExtras(); 
String userName;

if (extras != null) {
    userName = extras.getString("name");
    // and get whatever type user account id is
}

6
왜 이것이 바람직한 것입니까?getStringExtra?
IgorGanapolsky

6
내 추측은 : 엑스트라가 될 수 있다면 null엑스트라 페치 전체를 건너 뛸 수 있습니다. 를 사용 getStringExtra하면 기본적으로 일련의로 변경됩니다 if(extras != null) { return extras.getString(name) }. getStringExtra전화 할 때마다 하나씩 . 이 옵션은 null한 번만 확인 하면되므로 전혀 읽지 않아도 Bundle됩니다. 그 외에도 매번 내부적으로 getStringExtra계속 물어볼 것입니다 getExtras. 따라서 더 많은 함수 호출이 있습니다.
Daniël Sonck

39
//  How to send value using intent from one class to another class
//  class A(which will send data)
    Intent theIntent = new Intent(this, B.class);
    theIntent.putExtra("name", john);
    startActivity(theIntent);
//  How to get these values in another class
//  Class B
    Intent i= getIntent();
    i.getStringExtra("name");
//  if you log here i than you will get the value of i i.e. john

31

추가

데이터 설정

String value = "Hello World!";
Intent intent = new Intent(getApplicationContext(), NewActivity.class);
intent.putExtra("sample_name", value);
startActivity(intent);

데이터 가져 오기

String value;
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
    value = bundle.getString("sample_name");
}

17

데이터를 수신하려는 또 다른 새로운 의도를 초기화하는 대신 다음을 수행하십시오.

String id = getIntent().getStringExtra("id");

11

FragmentActivity에서 사용되는 경우 다음을 시도하십시오.

첫 페이지는 FragmentActivity를 확장합니다

Intent Tabdetail = new Intent(getApplicationContext(), ReceivePage.class);
Tabdetail.putExtra("Marker", marker.getTitle().toString());
startActivity(Tabdetail);

프래그먼트에서는 getActivity()먼저 전화 하면됩니다.

두 번째 페이지는 조각을 확장합니다 .

String receive = getActivity().getIntent().getExtras().getString("name");

1
또한 getExtras (). getString ( "name") 대신 getStringExtra ( "name")를 사용할 수 있습니다.
Plot

7

조각으로 여분의 데이터를 얻으려고하면 다음을 사용하십시오.

다음을 사용하여 데이터를 배치하십시오.

Bundle args = new Bundle();
args.putInt(DummySectionFragment.ARG_SECTION_NUMBER);

다음을 사용하여 데이터를 가져옵니다.

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


  getArguments().getInt(ARG_SECTION_NUMBER);
  getArguments().getString(ARG_SECTION_STRING);
  getArguments().getBoolean(ARG_SECTION_BOOL);
  getArguments().getChar(ARG_SECTION_CHAR);
  getArguments().getByte(ARG_SECTION_DATA);

}

6

intent 에서 객체 또는 문자열 또는 모든 유형의 데이터에 관계없이 모든 유형의 추가 데이터를 가져올 수 있습니다 .

Bundle extra = getIntent().getExtras();

if (extra != null){
    String str1 = (String) extra.get("obj"); // get a object

    String str2 =  extra.getString("string"); //get a string
}

가장 짧은 해결책 은 다음 과 같습니다.

Boolean isGranted = getIntent().getBooleanExtra("tag", false);

4

** 의도에 따라 데이터 입력-**

 Intent intent = new Intent(mContext, HomeWorkReportActivity.class);
            intent.putExtra("subjectName","Maths");
            intent.putExtra("instituteId",22);
            mContext.startActivity(intent);

** 의도별로 데이터 가져 오기-**

  String subName = getIntent().getStringExtra("subjectName");
  int insId  getIntent().getIntExtra("instituteId",0);

Intent 로 Integer 값 을 보내면 getIntent (). getIntExtra ( "instituteId", 0) 에서 두 번째 매개 변수 0을 사용해야 할 때 0을 사용하지 않으면 android에서 오류가 발생합니다.


2

코 틀린

첫 활동

val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("key", "value")
startActivity(intent)

두 번째 활동

val value = getIntent().getStringExtra("key")

암시

보다 관리 된 방식으로 키를 항상 일정한 파일에 넣으십시오.

companion object {
    val PUT_EXTRA_USER = "PUT_EXTRA_USER"
}

1

그냥 제안 :

i.putExtra ( "id".....)에서 "id"또는 "name"을 사용하는 대신, putExtra ()와 함께 사용할 수있는 현재 표준 필드를 사용하는 것이 좋습니다. 의도 .EXTRA_something.

전체 목록은 Intent (Android Developers) 에서 찾을 수 있습니다 .


1

간단한 방법으로 할 수 있습니다 :

FirstActivity에서 :

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("uid", uid.toString());
intent.putExtra("pwd", pwd.toString());
startActivity(intent);

SecondActivity에서 :

    try {
        Intent intent = getIntent();

        String uid = intent.getStringExtra("uid");
        String pwd = intent.getStringExtra("pwd");

    } catch (Exception e) {
        e.printStackTrace();
        Log.e("getStringExtra_EX", e + "");
    }

1

첫 번째 활동에서 가치가있는 의도를 전달하십시오.

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("uid", uid.toString());
intent.putExtra("pwd", pwd.toString());
startActivity(intent);

두 번째 활동에 대한 의도를 수신;-

Intent intent = getIntent();
String user = intent.getStringExtra("uid");
String pass = intent.getStringExtra("pwd");

일반적으로 값을 보내고 값을 얻기 위해 두 가지 방법을 사용합니다. 값을 전송하기 위해 우리가 사용하는 intent.putExtra("key", Value);다른 활동에 의도받는 동안 우리는 사용 intent.getStringExtra("key");과 의도 데이터를 얻을 수 String또는 데이터 (다른 유형 얻기 위해 다른 가능한 방법을 사용 Integer, Boolean등). 키는 가치를 식별하는 키워드 일 수 있으며, 어떤 가치를 공유하고 있는지를 의미합니다. 그것이 당신을 위해 효과가 있기를 바랍니다.


0

당신은 또한 다음과 같이 할 수있는
의도에 // 입력 값

    Intent in = new Intent(MainActivity.this, Booked.class);
    in.putExtra("filter", "Booked");
    startActivity(in);

// 의도에서 가치를 얻는다

    Intent intent = getIntent();
    Bundle bundle = intent.getExtras();
    String filter = bundle.getString("filter");

0

의도에서 다른 유형의 엑스트라 가져 오기

Intent에서 데이터에 액세스하려면 두 가지를 알아야합니다.

  • 데이터의 데이터 유형입니다.

Intent 클래스에는 다른 종류의 데이터 유형을 추출하는 다양한 메소드가 있습니다. 이렇게 생겼어요

getIntent (). XXXX (KEY) 또는 intent.XXX (KEY);


따라서 otherActivity에서 설정 한 varibale의 데이터 유형을 알고 있으면 해당 방법을 사용할 수 있습니다.

의도에서 활동의 문자열을 검색하는 예

String profileName = getIntent().getStringExtra("SomeKey");

다른 dataType에 대한 다양한 메소드 변형 목록

Intent 공식 문서에서 사용 가능한 메소드 목록을 볼 수 있습니다 .


0

이것은 어댑터 용이며, 활동의 경우 mContext를 활동 이름으로 변경하고 조각의 경우 mContext를 getActivity ()로 변경해야합니다

 public static ArrayList<String> tags_array ;// static array list if you want to pass array data

      public void sendDataBundle(){
            tags_array = new ArrayList();
            tags_array.add("hashtag");//few array data
            tags_array.add("selling");
            tags_array.add("cityname");
            tags_array.add("more");
            tags_array.add("mobile");
            tags_array.add("android");
            tags_array.add("dress");
            Intent su = new Intent(mContext, ViewItemActivity.class);
            Bundle bun1 = new Bundle();
            bun1.putString("product_title","My Product Titile");
            bun1.putString("product_description", "My Product Discription");
            bun1.putString("category", "Product Category");
            bun1.putStringArrayList("hashtag", tags_array);//to pass array list 
            su.putExtras(bun1);
            mContext.startActivity(su);
        }

-2

난 그냥 대답을 게시 여기에 그 몇 가지 대안을 포함하여 좀 더 자세히 커버이 주제를.

그것은 사용 증기 API는 새로운 jQuery를 내가 안드로이드 디바이스를 단순화하기 위해 쓴 안드로이드 프레임 워크에 영감을. 액티비티간에 데이터를 쉽게 전달할 수있는 방법에 대해서는 해당 답변의 예를 확인하십시오.

또한 VaporIntent메소드 호출을 연결하고 오버로드 된 .put(...)메소드를 활용할 수있는을 보여줍니다 .

$.Intent().put("data", "myData").put("more", 568)...

Vapor API를 사용하여 전체 응용 프로그램 주위에 데이터를 쉽게 전달할 수 있으므로 앱 개발 중에 여러분과 다른 사람들에게 도움이 되길 바랍니다.


1
Vapor API에 대한 귀하의 답변 중 일부를 보았습니다. 재미 있습니다 .Intent.getextras ()와 같은 데이터를 얻는 방법은 무엇입니까 ??
Kalai.G

이것을 확인하십시오 . 인 텐트 엑스트라를 검색하는 방법에 대해 설명합니다. 자세한 내용은 여기에 있습니다 . 도움이 되나요?
다리우스

2
체인 방법에 너무 많은 오버 헤드가 있다고 생각합니다. "this"를 연쇄 가능하게 (즉 "setter") 반환하는 메소드를 호출하는 경우 OOP의 설계 원칙을 위반하는 것입니다. 나는 단순함을 좋아하지만 일련의 메소드가 있으면 디버깅도 어려울 수 있습니다. API에 가치가 있으며 메소드 체인에 동의하지 않습니다.
nckbrz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.