0

저는 Android와 java에서 새로운데 여러 활동이 필요한 앱을 개발하려고합니다.AndroidStudio에서 여러 활동의 데이터를 전송하는 방법은 무엇인가요?

첫 번째 활동은 주 메뉴이고 두 번째 활동은 알람이며 세 번째 활동은 설정입니다.

문제는 내가 처음부터 두 번째 활동을 시작하지만 세 번째 활동에서 알람을 중지하기 위해 비밀번호를 확인하려고합니다.

자습서를 많이 확인했는데 세 번째 활동의 데이터를 두 번째로 보내야 할 것 같습니다.하지만 두 번째를 처음 만들 때 "의도"개체를 얻는 방법을 모르겠습니다. 데이터를 보내고 동일한 참조로 다른 하나를 만들면 충돌이 발생합니다.

첫 번째 작업에서 세 번째 작업까지 두 번째 의도를 보내려고했지만 String, Int ...이 아니기 때문에이를 수신하는 방법을 알지 못합니다. "bundle.getString"을 수행하십시오.

나는 조금 혼란스럽고 생각보다 쉽습니다. 나는 어떤 대답을 주셔서 감사합니다.

첫 번째 활동 (메인) :

package com.example.robert.savemob; 

import android.support.v7.app.AppCompatActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 

public class Main extends AppCompatActivity { 

    Intent i1; 
    Intent i2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     i1 = new Intent(this, Alarma.class); 
     i2 = new Intent(this, Opciones.class); 
    } 

    public void Alarm(View view) { 
     startActivity(i1); 
    } 
    public void Settings(View view) { 
     startActivity(i2); 
    } 
} 

두 번째 활동 (Alarma)

package com.example.robert.savemob; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.Toast; 

public class Alarma extends AppCompatActivity { 

    private EditText et1; 
    String clavecorrecta; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_alarma); 

     et1=(EditText)findViewById(R.id.et1); 
     Bundle bundle = getIntent().getExtras(); 
     clavecorrecta = bundle.getString("clavecorrecta"); 
    } 

    public void Parar(View v) { 
     String clave=et1.getText().toString(); 
     if (clave.length()==0) { 
      Toast notificacion= Toast.makeText(this,"Introduce la clave", Toast.LENGTH_LONG); 
      notificacion.show(); 
     } 
     else if (clave.equals(clavecorrecta)) { 
      finish(); 
     } 
     else { 
      Toast notificacion= Toast.makeText(this,"Clave incorrecta", Toast.LENGTH_LONG); 
      notificacion.show(); 
     } 
    } 
} 

세 번째 활동 (Opciones)

package com.example.robert.savemob; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.EditText; 

public class Opciones extends AppCompatActivity { 

    private EditText et2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.opciones); 

     et2=(EditText)findViewById(R.id.et2); 

     i1.putExtra("clavecorrecta", et2.getText().toString()); //I want to send it but can't acces to that i1 
    } 

} 

답변

0

이렇게 할 수 있습니다. Opciones 활동에서 정적 String 변수를 선언하십시오. EditText 데이터를 문자열에 저장하면 두 번째 활동에서 문자열을 참조 할 수 있습니다.

public static String claveCorrecta = ""; 
claveCorrecta = et2.getText.toString(); 

세 번째 활동은 이제 두 번째 활동에서 당신은 당신은 기본 유형뿐만 아니라 다른 활동 POJO 객체를 보낼 수 있습니다

Opciones.claveCorrecta 
1

공유하는 데 필요한 데이터를 따라, 당신은 액티비티간에 번들을 보내거나, 공유 환경 설정을 사용하거나, 공유 된 데이터로 자신의 싱글 톤 클래스를 구현할 수 있습니다 모든 앱간에 내가 다른 활동을위한 응용 프로그램의 모든 지점에서 알려진해야 할 데이터를 공유해야하는 경우 는,이 같은 싱글을 선호 :

public class AppData { 

    private static AppData ourInstance = new AppData(); 

    private String deviceId = null; // Device 
    private String coupon = null; // Coupon used to chack a valid event 



    public static AppData getInstance() { 
     return ourInstance; 
    } 

} 

과 같이 사용 :

AppData.getInstance().deviceId = "sample device Id"; 

당신이 필요로하는 경우 다른 인스턴스에서 분리 된 방식으로 정보를 보낼 :

  1. 를 같은 소스 활동 무언가에서 :

    개인 무효 switchToLoginActivity (int errorCode) { 의도 의도 = 새로운 의도 (this, LoginActivity.class); 당신이 데이터를 얻을 필요가 대상 활동에서

    Bundle bundle = new Bundle(); 
    bundle.putInt (Commons.LOGIN_SHOW_MESSAGE, errorCode); 
    
    intent.putExtras(bundle); 
    startActivity(intent); 
    overridePendingTransition(R.anim.left_to_right_in, R.anim.left_to_right_out); 
    finish(); 
    

    }

  2. 수신 :

    공공 무효에서 onCreate (번들 savedInstanceState) { 슈퍼.onCreate (savedInstanceState);

    getParametersFromIntent(); 
    

    }

    개인 무효 getParametersFromIntent() {

    Bundle bundle = getIntent().getExtras(); 
    
    if (bundle != null) { 
    
        if (bundle.containsKey(Commons.LOGIN_SHOW_MESSAGE)) { 
         showMessage = bundle.getInt (Commons.LOGIN_SHOW_MESSAGE); 
        } 
    
    } 
    

    }

는 도움이되기를 바랍니다.

0

하여 문자열을 참조 할 수 있습니다. POJO을 보내려면 Serializable 또는 Parcellable을 구현해야합니다. 예를 들어, 두 번째 활동에 데이터를 전송하는

은 같은 것을 할 : 다시 두 번째 활동에서 일부 데이터를 수신하려면

Intent intent = new Intent(context, SingleFragmentHostActivity.class); 
    Bundle extras = new Bundle(); 
    extras.putString("key_title", "Title"); 
    extras.putSerializable("pojo", new Car()); // Car class must implemente Serializable 
    intent.putExtras(extras); 
    startActivity(intent); 

는이 같은 startActiivtyForResult 대신 startActivity을 사용해야합니다 :

public final static int REQUEST_CODE = 0001; // integer of your choice 

    startActivityForResult(intent, REQUEST_CODE); 

그런 다음 startActivityForResult이라는 작업에서 onActivityResult 메서드를 재정의해야합니다. 이 같은 것 :

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode == REQUEST_CODE) { 
     if(resultCode == RESULT_OK) { 
      if(data != null && data.getExtras() != null) {  
       data.getExtras().getBoolean("key_is_success", false) 
      } 
     } else if(resultCoee == RESULT_CANEL){ 
      // Your logic in case user cancelled the operation or something. 
     } 
    } 
} 

예를 들어 두 번째 활동에서 부울을 다시 첫 번째 활동으로 보내려고합니다. 당신이 뭔가를 할 수 있습니다 로직의

Intent intent = new Intent(); 
    intent.putExtra("key_is_success", true); 
    setResult(RESULT_OK, intent); 
    finish(); 

같은 종류의 적용 다시 첫 번째 활동으로 보낼 것입니다 다시 두 번째 작업과 두 번째 작업에 세 번째 활동에서 일부 데이터를 보내려면.

두 번째 활동의 세 번째 활동을 시작할 때 Intent.FLAG_ACTIVITY_FORWARD_RESULT을 사용할 수도 있습니다. 문서에 따라 :

이 의도를 사용하여 기존 활동에서 새 활동을 시작하는 경우 기존 활동의 응답 대상이 새 활동으로 전송됩니다. 이렇게하면 새 액티비티가 setResult (int)를 호출하고 그 결과를 원래 액티비티의 응답 타겟으로 되돌려 보낼 수있다.

은 자세한 내용은이 링크를 참조 : https://developer.android.com/training/basics/intents/result.html

을 나는 그것이 당신을 도움이되기를 바랍니다. 건배!