I want to send a value("sessionId") from one activity to another. I have used intent for that but I don't know how to access that variable so that I can use it in Intent.
This is my java file:-
public class Login extends Activity {
//URL to get JSON Array
private static String url = "http://*************/webservice.php?operation=getchallenge&username=admin";
//JSON Node Names
private static final String TAG_RESULT = "result";
private static final String TAG_TOKEN = "token";
// contacts JSONArray
JSONArray contacts = null;
String token = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
new AsyncTask<Void, Void, Void>() {
@SuppressWarnings("unused")
JSONObject result;
@Override
protected Void doInBackground(Void... params) {
// Creating new JSON Parser
JSONParser jParser = new JSONParser();
// Getting JSON from URL
JSONObject json = jParser.getJSONFromUrl(url);
try {
// Getting JSON Array
result = json.getJSONObject(TAG_RESULT);
JSONObject json_result = json.getJSONObject(TAG_RESULT);
// Storing JSON item in a Variable
token = json_result.getString(TAG_TOKEN);
//Importing TextView
} catch (JSONException e) {
e.printStackTrace();
}
String username="admin";
String accesskeyvalue = "**************";
String accessKey=md5(token + accesskeyvalue);
String data = null;
try {
data = URLEncoder.encode("username", "UTF-8")
+ "=" + URLEncoder.encode(username, "UTF-8");
data += "&" + URLEncoder.encode("accessKey", "UTF-8") + "="
+ URLEncoder.encode(accessKey, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String text = "";
BufferedReader reader=null;
System.out.println(data);
// Send data
try
{
// Defined URL where to send data
URL url = new URL("http://***************/webservice.php?operation=login");
// Send POST data request
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write( data );
wr.flush();
// Get the server response
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
// Read Server Response
while((line = reader.readLine()) != null)
{
// Append server response in string
sb.append(line + "\n");
}
text = sb.toString();
}
catch(Exception ex)
{
}
finally
{
try
{
reader.close();
}
catch(Exception ex) {}
}
// Show response
System.out.println(text);
String sessionid = text.substring(41, 62);
System.out.println(sessionid);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
}.execute();
}
public String md5(String s)
{
MessageDigest digest;
try
{
digest = MessageDigest.getInstance("MD5");
digest.update(s.getBytes(),0,s.length());
String hash = new BigInteger(1, digest.digest()).toString(16);
return hash;
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
return "";
}
public void sendMessage(View view)
{
Intent intent = new Intent(Login.this, Quote1.class);
intent.putExtra("sessionId", sessionId);
startActivity(intent);
}
}
Here in sendMessage()
I am not able to use sessionId as it is declared in doInBackground()
which is protected
.
I am bit weak in OOP. Please help.
To access variables within a class between different methods simply make the variable a class variable.
To send data between activities refer to this article.
Basic example of Activity1 sending message to Activity2:
Activity1:
//Static String to identify the send parameter, without this this you have to set the exact same string twice.
public final static String SESSION_ID = "com.example.your.long.appname.SESSION_ID";
//sendMessage method is called for some reason in your class that you define (e.g user onClick)
public void sendMessage(View view) {
//Create an Intent
Intent intent = new Intent(this, Activity2.class);
//put the sessionID as extra intent.
intent.putExtra(SESSION_ID, sessionID);
//Start Activity2 with the intent.
startActivity(intent);
}
And to get the variable sent, use getStringExtra(String) for example in Activity2:
//Get the intent
Intent intent = getIntent();
//Get the message
String message = intent.getStringExtra(Activity1.SESSION_ID);
you can put your sessionId variable as a class variable in Login class as you did for TAG_RESULT, TAG_TOKEN etc...
Then, because your asyncTask is declared inline this Login class, you cann access it (and change its value) from it (the AsyncTask) and also access it's value in sendMessage method of the Login class.
I would also recommand (for better readability) to put you AsyncTask as another class (inner class of LoginClass). Code will be more readable.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.