ورود

View Full Version : مشکل با جابجایی دیتا بین دو Activity



AVR programmer
جمعه 29 مرداد 1395, 16:38 عصر
یه برنامه ماشین حساب دارم مینویسم که دارای چند theme مختلف باشه . برنامه ماشین حساب رو تو یک activity و برنامه تنظیم theme را توی یک activity دیگه نوشتم . مشکل از جایی شروع میشه که من از acivity اصلی به activity مربوط به theme میرم و theme رو انتخاب میکنم . حالا وقتی میخوام برگردم باید یه شماره عددی یا یه دیتایی رو به activity ماشین حساب انتقال بدم تا رنگ ها تغییر داده بشن ولی مشکل همیجاست که چجوری باید اینکارو انجام بدم .
با دستور intent.putExtra سعی کردم ولی نمیشه یا بعضی وقتها برنامه ارور میده . لطفا کمک کنید. اینم از دوتا activity :

activity ماشین حساب :


package Change_Color1.namespace;

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.EditText;
import android.widget.Toast;




public class Change_Color1Activity extends Activity {


EditText editText1;
Button button1;
Button button2;
Button button3;
Button button4;
Button button5;
Button button6;
Button button7;
Button button8;
Button button9;
Button button0;
Button buttonAdd;
Button buttonMinus;
Button buttonMultiply;
Button buttonDivision;
Button buttonEquals;
Button buttonClear;
Button buttonChangeTheme;
EditText editText2;


private int number1 = 0, number2 = 0, result = 0, state = 1;
int count = 0;
String msg;




@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


editText1 = (EditText) findViewById(R.id.editText1);
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
button4 = (Button) findViewById(R.id.button4);
button5 = (Button) findViewById(R.id.button5);
button6 = (Button) findViewById(R.id.button6);
button7 = (Button) findViewById(R.id.button7);
button8 = (Button) findViewById(R.id.button8);
button9 = (Button) findViewById(R.id.button9);
button0 = (Button) findViewById(R.id.button0);
buttonAdd = (Button) findViewById(R.id.buttonAdd);
buttonMinus = (Button) findViewById(R.id.buttonMinus);
buttonMultiply = (Button) findViewById(R.id.buttonMultiply);
buttonDivision = (Button) findViewById(R.id.buttonDivision);
buttonEquals = (Button) findViewById(R.id.buttonEquals);
buttonClear = (Button) findViewById(R.id.buttonClear);
buttonChangeTheme = (Button) findViewById(R.id.buttonChangeTheme);
editText2 = (EditText) findViewById(R.id.editText2);


if (count != 0)
{
msg = getIntent().getExtras().getString("Message");
editText2.setText(msg);
}
count++;
Toast.makeText(getApplicationContext(), "for test", Toast.LENGTH_LONG).show();


button1.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
if (state == 1)
{
number1 = (number1 * 10) + 1;
editText1.setText(String.valueOf(number1));
}
else
{
number2 = (number2 * 10) + 1;
editText1.setText(String.valueOf(number2));
}


}
});


button2.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
if (state == 1)
{
number1 = (number1 * 10) + 2;
editText1.setText(String.valueOf(number1));
}
else
{
number2 = (number2 * 10) + 2;
editText1.setText(String.valueOf(number2));
}


}
});


button3.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
if (state == 1)
{
number1 = (number1 * 10) + 3;
editText1.setText(String.valueOf(number1));
}
else
{
number2 = (number2 * 10) + 3;
editText1.setText(String.valueOf(number2));
}


}
});


button4.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
if (state == 1)
{
number1 = (number1 * 10) + 4;
editText1.setText(String.valueOf(number1));
}
else
{
number2 = (number2 * 10) + 4;
editText1.setText(String.valueOf(number2));
}


}
});


button5.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
if (state == 1)
{
number1 = (number1 * 10) + 5;
editText1.setText(String.valueOf(number1));
}
else
{
number2 = (number2 * 10) + 5;
editText1.setText(String.valueOf(number2));
}


}
});


button6.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
if (state == 1)
{
number1 = (number1 * 10) + 6;
editText1.setText(String.valueOf(number1));
}
else
{
number2 = (number2 * 10) + 6;
editText1.setText(String.valueOf(number2));
}


}
});


button7.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
if (state == 1)
{
number1 = (number1 * 10) + 7;
editText1.setText(String.valueOf(number1));
}
else
{
number2 = (number2 * 10) + 7;
editText1.setText(String.valueOf(number2));
}


}
});


button8.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
if (state == 1)
{
number1 = (number1 * 10) + 8;
editText1.setText(String.valueOf(number1));
}
else
{
number2 = (number2 * 10) + 8;
editText1.setText(String.valueOf(number2));
}


}
});


button9.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
if (state == 1)
{
number1 = (number1 * 10) + 9;
editText1.setText(String.valueOf(number1));
}
else
{
number2 = (number2 * 10) + 9;
editText1.setText(String.valueOf(number2));
}


}
});


button0.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
if (state == 1)
{
number1 = (number1 * 10) + 0;
editText1.setText(String.valueOf(number1));
}
else
{
number2 = (number2 * 10) + 0;
editText1.setText(String.valueOf(number2));
}


}
});


buttonAdd.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
state = 2;


}
});


buttonMinus.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
state = 3;


}
});


buttonMultiply.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
state = 4;


}
});


buttonDivision.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
state = 5;


}
});


buttonEquals.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
switch (state)
{
case 1:
break;
case 2:
result = number1 + number2;
break;
case 3:
result = number1 - number2;
break;
case 4:
result = number1 * number2;
break;
case 5:
result = number1 / number2;
break;
}
editText1.setText(String.valueOf(result));
state = 1;
number1 = result;
number2 = 0;


}
});


buttonClear.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
state = 1;
number1 = 0;
number2 = 0;
result = 0;
editText1.setText(String.valueOf(0));


}
});


buttonChangeTheme.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
Intent intent = new Intent(Change_Color1Activity.this, theme.class);
startActivity(intent);


}
});


}
}




activity مربوط به theme :


package Change_Color1.namespace;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;




public class theme extends Activity {


RadioGroup radioGroup1;
Button buttonBack;
public int counter = 0;




/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.theme);


radioGroup1 = (RadioGroup) findViewById(R.id.radioGroup1);
buttonBack = (Button) findViewById(R.id.buttonBack);
radioGroup1.setOnCheckedChangeListener(new OnCheckedChangeListener() {


@Override
public void onCheckedChanged(RadioGroup arg0, int selectedID) {
LinearLayout bgElement = (LinearLayout) findViewById(R.id.container);


if (selectedID == R.id.radioTheme1)
{
bgElement.setBackgroundColor(Color.BLACK);
counter = 1;


}
if (selectedID == R.id.radioTheme2)
{
bgElement.setBackgroundColor(Color.CYAN);
counter = 2;
}
if (selectedID == R.id.radioTheme3)
{
bgElement.setBackgroundColor(Color.RED);
counter = 3;
}


}
});


buttonBack.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View arg0) {
Intent intent = new Intent(theme.this, Change_Color1Activity.class);
intent.putExtra("Message", "counter");
startActivity(intent);
}
});


}


}

محمد رضا فاتحی
جمعه 29 مرداد 1395, 18:04 عصر
سلام...می تونید از متغیر های استاتیک استفاده کنید

AVR programmer
جمعه 29 مرداد 1395, 20:23 عصر
سلام...می تونید از متغیر های استاتیک استفاده کنید
چطوری ؟ میشه لطفا بیشتر توضیح بدین ؟

msroid
جمعه 29 مرداد 1395, 21:14 عصر
سلام

راه های مختلفی برای انتقال اطلاعات وجود داره. همراه با اینتنت متغیر که جای خود داره شما حتی میتونید یک کلاس رو انتقال بدید...!! اگر فقط یه عدد رو میخواید انتقال بدید به این صورت عمل کنید:


intent.putExtra("key", number);
startActivity(intent);

// dar activity morede nazar ke tavasote intent baz mishe
int number = getIntent().getIntExtra("key");


راه دیگه استفاده از متغیرهای استاتیک هست. مثلا در همون اکتیویتی اصلی برنامه یه متغیر مثل زیر تعریف میکنید:


public static int number;


حالا وقتی وارد اکتیویتی theme شدی اون مقدار مورد نظر رو داخل این متغیر قرار بده.


MainActivity.number = intValue;


حالا این مقدار در حافظه وجود داره و در تمام اکتیویتی های برنامه قابل استفاده هست.
راه دیگه استفاده از SharedPreferences هست. مقدار مورد نظر رو در اون ذخیره میکنی و این مقدار همیشه هم وجود خواهد داشت مگر اینکه دوباره مقدارش رو تغییر بدی یا پاکش کنی یا اینکه کاربر به صورت دستی وارد قسمت مدیریت برنامه ها بشه و برنامه مورد نظر رو Clear Data کنه.

AVR programmer
جمعه 29 مرداد 1395, 22:38 عصر
سلام

راه های مختلفی برای انتقال اطلاعات وجود داره. همراه با اینتنت متغیر که جای خود داره شما حتی میتونید یک کلاس رو انتقال بدید...!! اگر فقط یه عدد رو میخواید انتقال بدید به این صورت عمل کنید:


intent.putExtra("key", number);
startActivity(intent);

// dar activity morede nazar ke tavasote intent baz mishe
int number = getIntent().getIntExtra("key");


راه دیگه استفاده از متغیرهای استاتیک هست. مثلا در همون اکتیویتی اصلی برنامه یه متغیر مثل زیر تعریف میکنید:


public static int number;


حالا وقتی وارد اکتیویتی theme شدی اون مقدار مورد نظر رو داخل این متغیر قرار بده.


MainActivity.number = intValue;


حالا این مقدار در حافظه وجود داره و در تمام اکتیویتی های برنامه قابل استفاده هست.
راه دیگه استفاده از SharedPreferences هست. مقدار مورد نظر رو در اون ذخیره میکنی و این مقدار همیشه هم وجود خواهد داشت مگر اینکه دوباره مقدارش رو تغییر بدی یا پاکش کنی یا اینکه کاربر به صورت دستی وارد قسمت مدیریت برنامه ها بشه و برنامه مورد نظر رو Clear Data کنه.

راه هایی که شما گفتین رو انجام دادم هر کدوم یه اروری میده !!

msroid
جمعه 29 مرداد 1395, 22:50 عصر
راه هایی که شما گفتین رو انجام دادم هر کدوم یه اروری میده !!

این راه ها ساده هستند و پیچیدگی خاصی ندارند پس اگر با ارور مواجه میشید مشکل از جایی دیگه نشات میگیره.

میشه بفرمایید چه اروری میگیرید. مثلا بگید از طریق اینتنت با فلان ارور مواجه میشم.

AVR programmer
جمعه 29 مرداد 1395, 23:04 عصر
فهمیدم با متغیر استاتیک چطوریه !
باید اسم متغیر رو به نام کلاس با نقطه نسبت بدیم و برابرش کنیم با متغیر اکتیویتی جدید :

counter = theme.counter

تشکر از همه دوستان برای کمک :لبخند: