Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Frecventa modificata radio

Un nou pericol pt batrani

Ar trebuii sa vindem imobiliarele...

Dupa renuntarea la aparat dentar
 pelerinaj in Balcik

Noul format Jpegli iși propu...

Dade, dade

Parola la lock screen
 Deparazitare externa pisici fara ...

Seriale turcesti/coreene online H...

Merita un Termostat Smart pentru ...

Sfat achizitie MTB Devron Riddle
 Problema mare cu parintii= nervi ...

switch microtik

Permis categoria B la 17 ani

Sfaturi pentru pregatirea de eval...
 

Cum se mostenesc variabilele dintr-o clasa intr-o alta clasa in Android

- - - - -
  • Please log in to reply
14 replies to this topic

#1
skynet2015

skynet2015

    New Member

  • Grup: Junior Members
  • Posts: 4
  • Înscris: 06.07.2017
Salut,

Am nevoie de indrumare pentru a putea rezolva o problema care ma depaseste.
Incerc sa mostenesc o variabila dintr-o clasa intr-o alta clasa.
Denumirea variabilelei care vreau s-o mostenesc este: "cod_client".
Am nevoie sa mostenesc aceasta variabila "cod_client" in clasa "MyActivity" din clasa background.
M-am gandit s-o fac printr-un constructor in care sa initializez variabila, ca s-o pot mosteni, numai ca nu functioneaza.

public class MainActivity extends AppCompatActivity  {
	DrawerLayout mDrawerLayout;
	NavigationView mNavigationView;
	FragmentManager mFragmentManager;
	FragmentTransaction mFragmentTransaction;

	background b;
	public String pp;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	  //  final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
		final android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
		toolbar.setTitle("PROFIL");
	  // fab.setVisibility(View.VISIBLE);
		toolbar.setTitleTextColor(Color.WHITE);

		//NU FUNCTIONEAZA IMI INTOARCE NULL 
		b = new background(getApplication());
		pp = b.cod_client;
		Toast.makeText(getApplicationContext(),pp,Toast.LENGTH_LONG).show();


			 mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
			 mNavigationView = (NavigationView) findViewById(R.id.shitstuff) ;

			 mFragmentManager = getSupportFragmentManager();
			 mFragmentTransaction = mFragmentManager.beginTransaction();
			 mFragmentTransaction.replace(R.id.containerView,new profil()).commit();
		mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
			 @Override
			 public boolean onNavigationItemSelected(MenuItem menuItem) {
				mDrawerLayout.closeDrawers();
				 toolbar.setTitleTextColor(Color.WHITE);

				 if (menuItem.getItemId() == R.id.sport) {
					 FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
					 fragmentTransaction.replace(R.id.containerView, new TabFragment()).commit();

					toolbar.setTitle("SPORT");
					 toolbar.setTitleTextColor(Color.WHITE);
					// fab.setVisibility(View.INVISIBLE);

				 }
				 else if (menuItem.getItemId() == R.id.acvatice)
				 {
					 FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
					 xfragmentTransaction.replace(R.id.containerView,new TabFragment2()).commit();

					 toolbar.setTitle("ACVATICE");
					// fab.setVisibility(View.INVISIBLE);
				 }
				 else if(menuItem.getItemId() == R.id.relaxare)
				 {

					 toolbar.setTitle("RELAXARE");
					 FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
					 xfragmentTransaction.replace(R.id.containerView,new TabFragment3()).commit();
					// fab.setVisibility(View.INVISIBLE);
				 }
				 else if(menuItem.getItemId() == R.id.masaj)
				 {
					 toolbar.setTitle("MASAJ");
					 FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
					 xfragmentTransaction.replace(R.id.containerView,new TabFragment4()).commit();

					// fab.setVisibility(View.INVISIBLE);
				 }
				 else if(menuItem.getItemId()  == R.id.setari)
				 {
					 toolbar.setTitle("SETARI");
					 FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
					 xfragmentTransaction.replace(R.id.containerView,new TabFragment5()).commit();

				 }

				 return false;
			}
		});
		/**
		 * Setup Drawer Toggle of the Toolbar
		 */
				toolbar.inflateMenu(R.menu.menu_main);
				final ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout, toolbar,R.string.app_name,
				R.string.app_name);
				mDrawerLayout.setDrawerListener(mDrawerToggle);
				mDrawerToggle.syncState();
				toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
			@Override
			public boolean onMenuItemClick(MenuItem menu ){
			   if(menu.getItemId() == R.id.profil)
				{
					FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
					xfragmentTransaction.replace(R.id.containerView,new profil()).commit();
					toolbar.setTitle("PROFIL");
				   // fab.setVisibility(View.VISIBLE);
				}
				else if(menu.getItemId() == R.id.rezervare)
				{
					toolbar.setTitle("REZERVARE");
					FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
					xfragmentTransaction.replace(R.id.containerView,new RezervareServicii()).commit();
				   // fab.setVisibility(View.VISIBLE);
				}
				else if (menu.getItemId() == R.id.factura)
			   {
				   toolbar.setTitle("FACTURA");
				   FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
				   xfragmentTransaction.replace(R.id.containerView,new Factura()).commit();
				  // fab.setVisibility(View.VISIBLE);
			   }

				return false;
			}
		});

	}



public class background extends AsyncTask<String,String,String> {
	Context ctx;
	String data = "";
	String cnp = "",kg=null,inaltime= null,cod_client;
   background(Context  context)
	{
		 this.ctx=context.getApplicationContext();
		 cod_client = "";
	}
	background(String  c)
	{
	   c=cod_client;
	}

	@Override
	protected String doInBackground(String... params) {
		String type = params[0];
		String name = params[1];
		String password = params[2];
		int tmp;
		if (type.equals("login")) {
			try
			{
				URL url = new URL("http://192.168.1.1/data2.php");
				String urlParams = "email=" + name + "&parola=" + password;
				HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
				httpURLConnection.setDoOutput(true);
				OutputStream os = httpURLConnection.getOutputStream();
				os.write(urlParams.getBytes());
				os.flush();
				os.close();
				InputStream is = httpURLConnection.getInputStream();
				while ((tmp = is.read()) != -1) {
					data += (char) tmp;
				}
				is.close();
				httpURLConnection.disconnect();
				return data;
			} catch (MalformedURLException e) {
				e.printStackTrace();
				return "Exception: " + e.getMessage();
			} catch (IOException e) {
				e.printStackTrace();
				return "Exceptionn: " + e.getMessage();
			}
		}
		else if (type.equals("inregistrare"))
		{
			try {
				String numee= params[1];
				String prenumee=params[2];
				String cnp = params[3];
				String telefon =params[4];
				String email = params[5];
				String parola = params[6];
				URL url = new URL("http://192.168.1.1/data.php");
				String urlParams = "nume=" + numee+"&prenume="+prenumee+"&cnp="+cnp+"&telefon="+telefon+"&email="+email+"&parola="+parola;
				HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
				httpURLConnection.setDoOutput(true);
				OutputStream os = httpURLConnection.getOutputStream();
				os.write(urlParams.getBytes());
				os.flush();
				os.close();
				InputStream is = httpURLConnection.getInputStream();
				while ((tmp = is.read()) != -1) {
					data += (char) tmp;
				}
				is.close();
				httpURLConnection.disconnect();
				return data;
			} catch (MalformedURLException e) {
				e.printStackTrace();
				return "Exception: " + e.getMessage();
			} catch (IOException e) {
				e.printStackTrace();
				return "Exceptionn: " + e.getMessage();
			}
		}
		return null;
	}
	@Override
	protected void onPreExecute()
	{
	}
	@Override
	protected void onPostExecute(String result) {

		if(result.equals("inregistrare cu succes"))
		{
			Toast.makeText(ctx,"Inregistrare cu success!",Toast.LENGTH_LONG).show();
		}
		else if(result.equals("fara success"))
		{
			Toast.makeText(ctx,"Inregistrare fara success",Toast.LENGTH_LONG).show();
		}

		String err=null;
		try
		{
			JSONObject emp=(new JSONObject(result)).getJSONObject("user_data");
			cod_client = emp.getString("cod_client");
			cnp = emp.getString("cnp");
			kg=emp.getString("kilograme");
			inaltime=emp.getString("inaltime");
			Toast.makeText(ctx,"id este "+cod_client+"cnp este "+cnp,Toast.LENGTH_LONG).show();
		} catch (JSONException e) {
			e.printStackTrace();
			err = "Exception: "+e.getMessage();
		}
		if(cod_client != null && cnp!=null)
		{
			Toast.makeText(ctx,"Autentificare cu success!",Toast.LENGTH_LONG).show();
			Intent intent = new Intent(ctx,MainActivity.class);
			intent.putExtra("cod_client", cod_client);
			intent.putExtra("cnp", cnp);
			intent.putExtra("kg", kg);
			intent.putExtra("inaltime", inaltime);
			ctx.startActivity(intent);
		 
		}
		else
		{
			Toast.makeText(ctx,"Autentificare esuata....",Toast.LENGTH_LONG).show();
		}
}



#2
tavitu

tavitu

    Minune: HE a început să emită facturile!

  • Grup: Senior Members
  • Posts: 5,598
  • Înscris: 16.02.2009
1. În Java, a moșteni, respectiv moștenirea are un anumit înțeles, din ce văd eu aici, moștenirea nu se aplică în cazul tău.
2. În al doilea constructor pentru background, background(String c), ai c = cod_client, este o eroare de logică, ar trebui să fie invers.
3. Îți întoarce null sau "", adică string gol? Ce valoare te-ai aștepta să primești dacă ar funcționa corect?
4. Ai încercat cu un debugger să vezi ce se întâmplă?

Edit
5. Ești sigur că folosești AsyncTask cum trebuie? Conform https://developer.an.../AsyncTask.html trebuie apelată metoda execute() ca să ruleze, dar nu o văd apelată în codul tău.

Edited by tavitu, 07 July 2017 - 12:39.


#3
skynet2015

skynet2015

    New Member

  • Grup: Junior Members
  • Posts: 4
  • Înscris: 06.07.2017
3. Nu imi intoarce null imi intoarce un string gol.Ma astept sa primesc o valoare din baza de date cu codul de client.
5. Am executat metoda execute() in alta clasa iar dupa autentificare in variabila cod_client mi se salveaza codul de client care il i-au din baza de date dar am nevoie de acest "cod_client" in clasa "MyActivity".

#4
tavitu

tavitu

    Minune: HE a început să emită facturile!

  • Grup: Senior Members
  • Posts: 5,598
  • Înscris: 16.02.2009
Logica e greșită. Trebuie să apelezi b.execute(), dacă doInBackground() reușeste, atunci în onPostExecute() o să ai cod_client valid, doar atunci poți să transmiți valoarea validă pentru cod_client către MyActivity. Plus că am mai observat alte lucruri ciudate.

#5
IllusiveMan

IllusiveMan

    Member

  • Grup: Members
  • Posts: 750
  • Înscris: 02.07.2017
Nu vad nicio clasa MyActivity.

#6
skynet2015

skynet2015

    New Member

  • Grup: Junior Members
  • Posts: 4
  • Înscris: 06.07.2017
Codul client este deja populat cu date il aduc din baza de date.
Numai ca nu reusesc sa imi aduc valoarea din variabila cod_client in clasa MainActivity .
@IllusiveMan Scuze mi-a ramas in cap "MyActivity".

Edited by skynet2015, 07 July 2017 - 13:18.


#7
IllusiveMan

IllusiveMan

    Member

  • Grup: Members
  • Posts: 750
  • Înscris: 02.07.2017
Mi-am dat seama... ok... acu' intreaba-te: de ce anume ar trebui ca MainActivity sa mosteneasca ceva din clasa background (care e cam la plesneala facuta, ba chiar si variabila aia cod_client tot la plesneala) ... de curiozitate, ce e asta, la ce-ti trebuie? :)

#8
tavitu

tavitu

    Minune: HE a început să emită facturile!

  • Grup: Senior Members
  • Posts: 5,598
  • Înscris: 16.02.2009
b = new background(getApplication()); // cod_client ia valoarea "" - string gol
pp = b.cod_client; // dacă nu ai apelat b.execute()/chiar dacă ai apelat b.execute(), dar doInBackground() și onPostExecute() nu au terminat de executat, cod_client o să aibe valoarea "", string gol, în momentul în care faci atribuirea, chiar dacă mai târziu o să aibe o valoare validă

Înțelegi?

#9
skynet2015

skynet2015

    New Member

  • Grup: Junior Members
  • Posts: 4
  • Înscris: 06.07.2017
@IllusiveMan Aplicatia este gandita pe fragmente.
Am nevoie sa mut codul de client care il i-au din baza de date in clasa MainActivty deoarece acesta imi este util pentru a face factura unui client pe baza unui cod de client.
In momentul cand  schimb fragmentul si ajung in Factura dupa cum se poate vedea in clasa MainActivity, am nevoie sa mut codul de client din MainActivity in FACTURA, dar trebuie sa trec prin clasa MainActivity pentru a muta codul de client in FACTURA

#10
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Nu m-am mai uitat pe android API de ceva vreme, însă parcă existau metode pentru message passing.

#11
romio79

romio79

    Active Member

  • Grup: Members
  • Posts: 1,655
  • Înscris: 30.03.2005
cred ca incerci sa faci ceva asincron, da nu prea intelegi ce se intampla

#12
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Cred ca urmeaza modelul curat de modularizare a aplicatiilor android.

#13
13YTe

13YTe

    Active Member

  • Grup: Members
  • Posts: 1,320
  • Înscris: 25.11.2006
Ceea ce face este foarte logic si corect, incearca sa mosteneasca codul de client dintr-un fragment in toate celelalte ca pe baza lui sa poata face interogari si inserari intr-una sau mai multe tabele ale unei baza de date.
Practic aplicatia are fluiditate daca este lucrata pe fragmente, nu mai exista delay-uri in experienta, iar in functie de specificul ei poate sa execute toate operatiile asupra bazei de date la un anumit momentdat (final).

Edited by 13YTe, 08 July 2017 - 01:10.


#14
tavitu

tavitu

    Minune: HE a început să emită facturile!

  • Grup: Senior Members
  • Posts: 5,598
  • Înscris: 16.02.2009
Nu este moștenirie! Problema lui nu este cu fragmentele ci cu AsyncTask, mai exact cu faptul că AsyncTask este, ei bine, este asincronă și el încearcă să o folosească ca fiind sincronă.

Răspunsul de la întrebarea asta arată cum se folosește AsyncTask pentru a transfera un rezultat calculat de AsyncTask (codul de client) către MainActivity.

#15
InTech

InTech

    Kietata ?

  • Grup: Senior Members
  • Posts: 4,739
  • Înscris: 23.11.2005
Boss, te chinui foarte mult daca nu citesti si tu 200-300 pagini dintr-o carte de Android App Devel sau daca prefer uita-te la o mini-serie de tutoriale video pe subiectu asta.
Daca nu faci unu din astea doua, te vei umple de nervi, frustrare, nu o sa intelegi nimic, iar dupa ce rezolvi problema actuala o sa dai peste altele la care la fel o sa stai 2-3 zile.

E mult mai simplu sa pierzi din prima 2 zile cu cele 300 de pagini.
Pur si simplu tre sa intelegi cum e organizata o app de Android, ce-i ala un Activity, care-i ciclul de viata, si cam care ar fi stilul de lucru.

Edited by InTech, 14 July 2017 - 13:38.


Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate