ارسال داده بین activity های مختلف با استفاده از شی Intent

بسم الله الرحمن الرحیم

ارسال داده بین  activity های مختلف با استفاده از شی Intent

فصل دوم-بخش  نهم

در  کنار دریافت داده از یک Activity,  ارسال داده به یک Activity  دیگر هم بسیار رایج می باشد.به عنوان مثال شما می خواهید در  EditText  یک  متن پیش فرض  قبل از به نمایش در آمدرن Activityقرار  گیرید. که  برای این کار شما می توایند از شی  intent    استفاده کنید. در مثال های زیر انواع روش های ارسال داده  ها  به activity دیگر به شما شرح می دهیم

پروژه  جدیدی را به نام PassingData  ایجاد کنید

دستورات به فایل main.xml  اضافه کنید

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btn_SecondActivity"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Click to go to Second Activity" />
</LinearLayout>

  • یک فایل Xml  جدید در res\layout با نام secondactivity.xml ایجاد کنید 


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Welcome to Second Activity" />
<Button
android:id="@+id/btn_MainActivity"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Click to return to main activity"
android:onClick="onClick"/>
</LinearLayout>

دستورات زیر را در فایل  SecondActivity.java اضافه کنید

package com.MehrdadJavidi.passingdata;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class SecondActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.secondactivity);
Button btn =(Button)findViewById(R.id.btn_MainActivity);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
/** TODO Auto-generated method stub*/
Intent i = new Intent();
/**---use the putExtra() method to return some*/
/** value---*/
i.putExtra("age3", 45);
i.setData(Uri.parse("in matn aza Activity Dovom daryaf kardim"));
setResult(RESULT_OK,i);
finish();
}
});
Toast.makeText(this,getIntent().getStringExtra("str1"),
Toast.LENGTH_SHORT).show();
Toast.makeText(this,Integer.toString(
getIntent().getIntExtra("age1", 0)),
Toast.LENGTH_SHORT).show();
Bundle bundle = getIntent().getExtras();
Toast.makeText(this, bundle.getString("str2"),
Toast.LENGTH_SHORT).show();
Toast.makeText(this,Integer.toString(bundle.getInt("age2")),
Toast.LENGTH_SHORT).show();
}
}

آنهای که با Bold مشخص کرده ایم را در فایلAndroidManifest.xml وارد کنید

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.MehrdadJavidi.passingdata"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="14" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.MehrdadJavidi.passingdata.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.MehrdadJavidi.passingdata.SecondActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.MehrdadJavidi.passingdata.SecondActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>

دستورات زیر را در فایل MainActivity.java وارد نمایید.

package com.MehrdadJavidi.passingdata;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn =(Button)findViewById(R.id.btn_SecondActivity);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
/** TODO Auto-generated method stub*/
Intent i = new
Intent("com.MehrdadJavidi.passingdata.SecondActivity");
/**---use putExtra() to add new name/value pairs---*/
i.putExtra("str1", "Matn Aval Az MainActivity");
i.putExtra("age1", 25);
/**---use a Bundle object to add new name/values
/** pairs---*/
Bundle extras = new Bundle();
extras.putString("str2", "Matn Dovom Az MainActivity ");
extras.putInt("age2", 35);
/**---attach the Bundle object to the Intent object---*/
i.putExtras(extras);
/**---start the activity to get a result back---*/
startActivityForResult(i, 1);
}
});
}
public void onActivityResult(int requestCode,
int resultCode, Intent data)
{
/**---check if the request code is 1---*/
if (requestCode == 1) {
/**---if the result is OK---*/
if (resultCode == RESULT_OK) {
/**---get the result using getIntExtra()---*/
Toast.makeText(this, Integer.toString(
data.getIntExtra("age3", 0)),
Toast.LENGTH_SHORT).show();
/**---get the result using getData()---*/
Toast.makeText(this, data.getData().toString(),
Toast.LENGTH_SHORT).show();
}
}
}
}

حال برنامه با زدن کلید F11 اجرا کنید.

ارسال داده های بینActivity های مختلف

توضیحات

در اینجا  بعضی  از راها ی ارسال داده بین activity  ها  را شرح می دهیم.

اولین روش استفاد  از  متد putExtra()  مر بوط به  شی  Intent   که  به وسیله آن   نام و  مقادیر (name/value) را اضافه می کنیم

      

i.putExtra("str1", "Matn Aval Az MainActivity");

 

در اینجا  ما  دومقدار   را همراه با   نام و مقادیرشان وارد کرده ایم. نوع اول از نوع string  که   نام آن str1 و که مقدار آن Matn Aval Az MainActivity و   دیگر از نوع  intger  می باشد که  نام آن age1 و  مقدا آن 25 می باشد.

درکنار  متدputExtra() , شما   می  توانید  یک شی  Bundle ایجاد کنید. و از  متد  putExtras() استفاده کنید. این  طور فکر کنید که  شی  Bundle  یک  دیکشنری می باشد. که  شامل   نام و مقادیر(name/value) می باشد که آن را می توانیم به    به عنوام پارامتر  متد  putExtra()    شی  intent  ارسال کنیم.

Bundle extras = new Bundle();
extras.putString("str2", "Matn Dovom Az  MainActivity ");
extras.putInt("age2", 35);
  /**---attach the Bundle object to the Intent object---*/
i.putExtras(extras);

در activity  دوم  که داده  های ارسالی را دریافت می کند از شی  intent  استفاده می کنیم.شما  باید ابتدا شی  intent  را دریافت کنید که این کار را  با  getIntent() انجام میدهیم. و سپس با متد getStringExtra() که نام(name) را دریافت و مقدار(value) آن را بر می گرداند .  مقادیر مورد نظر را باز یابی می کنیم.

Toast.makeText(this,getIntent().getStringExtra("str1"),
Toast.LENGTH_SHORT).show();

در این مورد شما  getStringExtra()  نوع داده String   را باز یابی کرده اید. برای باز یابی مقادیر  integr  شما  باید getIntExtra() استفاده می کنید.   که  پارامتر دوم  مقدار پیش فرض  می باشد  در صورتی که  مقداری برای  آن تعیین نشده باشد  استفاده می  شود.

Toast.makeText(this,Integer.toString(
getIntent().getIntExtra("age1", 0)),
Toast.LENGTH_SHORT).show();

برای باز یابی با  شی  Bundle  شما از  متد  getExtras() استفاده می کنیم.

برای باز یابی مقادیر به صورت  خاص  شما  باید از  متد  مناسب استفاد ه کنید به عنوان مثال برای یاز یابی مقادیر از نوع string  از متد getString() استفاده می کنیم.


Toast.makeText(this, bundle.getString("str2"),
Toast.LENGTH_SHORT).show();

و متد getInt()  برای باز یابی نوع داده  intger  استفاده می کنیم.


Toast.makeText(this,Integer.toString(bundle.getInt("age2")),
Toast.LENGTH_SHORT).show();

و یک راه دیگر برای  بازیابی داده  همان که در بخش  قبلی بیان کرده ایم  استفاده از  متد setData() میباشد


/**---use the setData() method to return some value---*/
i.setData(Uri.parse("in matn aza Activity Dovom daryaf kardim"));

برای باز یابی داده های که توسط setData تعیین شده شما از  متد getData() استفاده میکنیم که آن را در بخش قبلب بیان کردیم  . مانند  زیر

/**---get the result using getData()---*/
Toast.makeText(this, data.getData().toString(),
Toast.LENGTH_SHORT).show();

نظرات (۰)

هيچ نظري هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی