2017-02-23 3 views
0

Je ne suis pas très familier avec le codage java mais je voulais créer ma propre application. Je souhaite utiliser SharedPreferences pour stocker des valeurs dans différentes activités/classes, comme indiqué dans plusieurs didacticiels (ainsi que des questions sur ce site), mais lorsque j'essaie de les lire dans une autre activité d'une autre classe, je reçois au hasard numéros comme 2131361821.SharedPreferences dans plusieurs classes

L'utilisateur doit remplir un champ textview avec l'ID direction_1000 afin que j'obtienne une direction du vent à 1000ft via la classe GetWind.

Si je stocke cette valeur en tant int en SharedPreference tout fonctionne bien, mais si je veux passer cette valeur à la classe InputNavData et l'afficher là-bas par le intPHI et Stringphi je reçois cette valeur étrange.

Quelqu'un peut-il m'aider à résoudre ce problème? Désolé d'avance pour le code et la question désordonnés mais comme je l'ai dit, c'est tout nouveau pour moi.

MainActivity

package com.example.navigationcalculator; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 

public class MainActivity extends Activity { 
public final static String EXTRA_MESSAGE = "com.example.navigationcalculator.MESSAGE"; 

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

/** Called when the user clicks the Agree button */ 
public void wind_input(View view) { 
    Intent intent = new Intent(this, GetWind.class); 
    startActivity(intent); 
} 

/** Called when the user clicks the Input Navigation Data button */ 
public void input_nav_data(View view) { 
    Intent intent = new Intent(this, InputNavData.class); 
    startActivity(intent); 
} 

/** Called when the user clicks the Calculate Data button */ 
public void calculate_data(View view) { 
    Intent intent = new Intent(this, CalculateData.class); 
    startActivity(intent); 
} 

} 

GetWind

package com.example.navigationcalculator; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.EditText; 

import static android.content.ContentValues.TAG; 
import static com.example.navigationcalculator.R.id.direction_1000; 

public class GetWind extends Activity { 

public static final String PREFS_NAME = "com.example.myfirstapp.sharedPref"; 

public final static String DIR_1000 = "com.example.myfirstapp.DIR_1000"; 
public final static String SPEED_1000 = "com.example.myfirstapp.SPEED_1000"; 



SharedPreferences sharedpreferences; 

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

} 

//Read all wind speeds and directions and put them in a shared preferences file 
public void input_nav_data(View view) { 
    Intent intent = new Intent(this, InputNavData.class); 

    sharedpreferences = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 

    startActivity(intent); 

    // 1000 feet 
    EditText dir_1000 = (EditText)findViewById(R.id.direction_1000); 
    int direction_1000 = Integer.parseInt(dir_1000.getText().toString()); 

    SharedPreferences.Editor editor = sharedpreferences.edit(); 

    editor.putInt(DIR_1000,direction_1000); 
    editor.commit(); 

    int shared_dir_1000 = sharedpreferences.getInt(PREFS_NAME,direction_1000); 
    String SD1000 = String.valueOf(shared_dir_1000); 
    Log.d("direction 1000",SD1000); 

} 
} 

InputNavData

package com.example.navigationcalculator; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.EditText; 

import static com.example.navigationcalculator.GetWind.PREFS_NAME; 
import static com.example.navigationcalculator.R.id.direction_1000; 



public class InputNavData extends Activity { 

public final static String altitude_static_string = "com.example.myfirstapp.altitude"; 

SharedPreferences sharedpreferences; 

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

} 

//Read all navigation data and pass them through as a string to activity CalculateData 
public void calculate_data(View view) { 
    Intent intent = new Intent(this, CalculateData.class); 

    sharedpreferences = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 

    startActivity(intent); 

    // Read the actual altitude 
    EditText alt = (EditText) findViewById(R.id.altitude); 
    int altitude = Integer.parseInt(alt.getText().toString()); 

    SharedPreferences.Editor editor = sharedpreferences.edit(); 

    editor.putInt(altitude_static_string,altitude); 
    editor.commit(); 

    int shared_altitude = sharedpreferences.getInt(PREFS_NAME,altitude); 
    String SALT = String.valueOf(shared_altitude); 
    Log.d("altitude",SALT); 

    int PHI = sharedpreferences.getInt(PREFS_NAME,direction_1000); 
    String phi = String.valueOf(PHI); 
    Log.d("dir 1000 in inputnavdata",phi); 
} 

} 
+0

Êtes-vous essayant de passer des données d'une certaine activité à une autre? –

+0

Oui en effet, j'essaie de transmettre les données (direction_1000) de l'activité InputNavData à l'activité CalculateData via des références partagées. – Phil

+0

N'utilisez pas 'SharedPreferences' pour simplement transmettre des données d'une activité à une autre, envoyez plutôt vos données avec' l'intention', si vous ne savez pas comment je peux vous aider –

Répondre

0

Regardez votre input_nav_data et calculate_data méthodes.

C'est parce que ce que le débit doit être:

  1. Obtenir la préférence partagée
  2. valeurs magasin à l'intérieur de préférence partagée.
  3. Commit
  4. activité Début

Ce que vous faites est

  1. Get préférence partagée
  2. activité Début
  3. valeurs magasin à l'intérieur de préférence partagée.
  4. Engagez

calculate_data

public void calculate_data(View view) { 
Intent intent = new Intent(this, CalculateData.class); 
sharedpreferences = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); // Read the actual altitude 
EditText alt = (EditText) findViewById(R.id.altitude); 
int altitude = Integer.parseInt(alt.getText().toString()); 
SharedPreferences.Editor editor = sharedpreferences.edit(); 
editor.putInt(altitude_static_string, altitude); 
editor.commit(); 
int shared_altitude = sharedpreferences.getInt(PREFS_NAME, altitude); 
String SALT = String.valueOf(shared_altitude); 
Log.d("altitude", SALT); 
int PHI = sharedpreferences.getInt(PREFS_NAME, direction_1000); 
String phi = String.valueOf(PHI); 
Log.d("dir 1000 in inputnavdata", phi); 
} 

startActivity(intent); 
+0

J'ai mis startActivity (intention) à la fin mais le résultat reste le même malheureusement ... Je suppose qu'il doit faire quelque chose avec le 'import static com.example.navigationcalculator.R.id.direction_1000; mais je ne suis pas sûr ... – Phil

0

Juste pour transmettre des données, vous pouvez utiliser:

int x = 0; 
intent.putExtra("xx", x); 

Et puis l'obtenir dans d'autres classes par:

Intent intent = getIntent(); 
xy= intent.getIntExtra("xx",0);