从MainActivity跳转到MailIndexActivity,第一个请求接口设置session,第二个activity请求接口获取session

java代码中获取header头里面的Set-Cookie

请求的时候,设置头信息Cookie,就可以相当于浏览器获取session

MainActivity.java

package com.tsh.test;

import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity {
public Button loginBtn;
public TextView loginUserName;
public TextView loginPassword;
public static String API="http://mail.sina.net/test.php";
public LoginHandler loginHandler;
public String sessionIdString;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取View对象
loginBtn=(Button) findViewById(R.id.loginBtn);
loginUserName=(TextView) findViewById(R.id.loginUsername);
loginPassword=(TextView) findViewById(R.id.loginPassword);
//给View对象设置点击事件
loginBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//开启新线程
Thread loginThread=new Thread(new LoginRunable());
loginThread.start();
}
});
loginHandler=new LoginHandler();
}
//实现Runable接口,开启新线程
class LoginRunable implements Runnable{
@Override
public void run() {
try {
URL url=new URL(API);
HttpURLConnection http=(HttpURLConnection) url.openConnection();
http.setRequestMethod("POST");
http.setDoInput(true);
http.setDoOutput(true); OutputStream ops=http.getOutputStream();
PrintWriter pw=new PrintWriter(ops);
String username=loginUserName.getText().toString();
String password=loginPassword.getText().toString();
pw.write("email="+username+"&psw="+password+"&loginfrom=app&output=json");
pw.flush(); String responseCookie = http.getHeaderField("Set-Cookie");
if (responseCookie != null) {
sessionIdString = responseCookie.substring(0, responseCookie.indexOf(";"));
} InputStream ins=http.getInputStream();
byte[] buffer = new byte[1024];
int length=0;
StringBuilder sb=new StringBuilder();
while((length=ins.read(buffer))!=-1){
sb.append(new String(buffer,0,length));
} Message msg=new Message();
msg.what=1;
msg.obj=sb.toString();
loginHandler.sendMessage(msg);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
//传递消息的handle
class LoginHandler extends Handler{
@Override
public void handleMessage(Message msg) {
String loginResponse=(String) msg.obj;
System.out.println(loginResponse);
Toast.makeText(MainActivity.this, loginResponse, 10).show();
Intent intent=new Intent(MainActivity.this, MailIndexActivity.class);
intent.putExtra("PHPSESSIONID",sessionIdString);
startActivity(intent);
}
}
}

MailIndexActivity.java

package com.tsh.test;

import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast; public class MailIndexActivity extends Activity {
public static String API="http://mail.sina.net/test.php";
public Handler sessionHandler;
public String sessionIdString;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); Intent intent = getIntent();
sessionIdString= intent.getStringExtra("PHPSESSIONID"); setContentView(R.layout.mail_index);
sessionHandler=new SessionHandler();
Thread sessionThread=new Thread(new SessionRunable());
sessionThread.start(); }
class SessionRunable implements Runnable{ @Override
public void run() {
URL url;
try {
url = new URL(API);
HttpURLConnection http=(HttpURLConnection) url.openConnection();
http.setRequestProperty("Cookie", sessionIdString);
InputStream ins=http.getInputStream();
byte[] buffer = new byte[1024];
int length=0;
StringBuilder sb=new StringBuilder();
while((length=ins.read(buffer))!=-1){
sb.append(new String(buffer,0,length));
} Message msg=new Message();
msg.what=1;
msg.obj=sb.toString();
sessionHandler.sendMessage(msg);
} catch (Exception e) {
e.printStackTrace();
} }
}
class SessionHandler extends Handler{
@Override
public void handleMessage(Message msg) {
String str=(String) msg.obj;
System.out.println("222");
System.out.println(str);
Toast.makeText(MailIndexActivity.this, str, 10).show();
}
}
}

PHP文件:

<?php
session_start();
if(empty($_SESSION)){
echo "设置session";
$_SESSION['name']=1;
echo session_id();
}else{
echo "获取session";
print_r($_SESSION);
}

[android] 与PHP的session进行交互demo的更多相关文章

  1. Android总结之WebView与Javascript交互[转]

    Android总结之WebView与Javascript交互   前言: 最近公司的App为了加快开发效率选择了一部分功能采用H5开发,从目前市面的大部分App来讲,大致分成Native App.We ...

  2. Android中webView和网页的交互

     Android中webView和网页的交互 Android中webView跟网页的交互式通过JavaScript进行的.具体步骤: 1.创建JavaScript,在点击的时候调用JavaScript ...

  3. Android调用系统相册和拍照的Demo

    最近我在群里看到有好几个人在交流说现在网上的一些Android调用系统相册和拍照的demo都有bug,有问题,没有一个完整的.确实是,我记得一个月前,我一同学也遇到了这样的问题,在低版本的系统中没问题 ...

  4. --@angularJS--指令与指令之间的交互demo

    1.index.html: <!DOCTYPE HTML><html ng-app="app"><head>    <title>c ...

  5. 大叔也说Xamarin~Android篇~为HttpClient共享Session,android与api的session共享机制

    回到目录 杂谈 在进行android进行开发时,我们的数据一般通过接口来获收,这里指的接口泛指web api,webservice,wcf,web应用程序等:它们做为服务端与数据库进行直接通讯,而AP ...

  6. Android 后台发送邮件 (收集应用异常信息+Demo代码)

    上一次说了如何收集我们已经发布的应用程序的错误信息,方便我们调试完善程序.上次说的收集方法主要是把收集的信息通过Http的post请求把相关的异常信息变成请求参数发送到服务器.这个对做过web开发的人 ...

  7. Android 内嵌 HTML5 并进行交互

    Android与HTML5的交互主要是两个部分, 与HTML5的交互以及与JavaScript的交互, 与HTML5的交互可以通过注册onclick事件转化为与JavaScript的交互 Androi ...

  8. Android通过Web与后台数据库交互

    2021.1.27 更新 已更新新版本博客,更新内容与原文章相比有点多,因此新开了一篇博客,请戳这里. 1 背景 开发一个App与后台数据库交互,基于MySQL+原生JDBC+Tomcat,没有使用D ...

  9. Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决

    前提: 1.安装Android Studio(过程略) 2.官网下载OpenCV for Android 网址:http:opencv.org/downloads.html 我下载的是下图的版本 3. ...

随机推荐

  1. C语言 算平均数

    int main() { int number ; int sum = 0; int count = 0; do { scanf("%d", &number ); if( ...

  2. php对象在内存中存在形式

    1,php中基本数据类型存在于栈区,对象这种数据类型存在于堆区: 比如如下代码,两个指针指向同一个对象,其输出相同 <?php /** * Created by PhpStorm. * User ...

  3. Jmeter后置处理器之JSON Extractor

    一.使用场景 json extractor后置处理器用在返回格式为json的HTTP请求中,用来获取返回的json中的某个值.并保存成变量供后面的请求进行调用或断言等. 二.使用方法 步骤一:选择HT ...

  4. [译文]casperjs使用说明-使用命令行

    使用命令行 Casperjs使用内置的phantomjs命令行解析器,在cli模块里,它传递参数位置的命名选项 但是不要担心不能熟练操控CLI模块的API,一个casper实例已经包含了cli属性,允 ...

  5. [web]Servlet中的Listener和Filter

    建议先看看 ——> Servlet工作原理 一.Listener 在Tomcat服务中,Listener的设计是基于观察者模式的,目前在Servlet中提供6中两类事件的观察者接口,它们分别是: ...

  6. Eclipse中的常见设置

    本文将移到下面的博客维护: 新的博客网址 当新建一个workspace时,习惯做下面的设置: 1. 在eclipse中,默认的Text file encoding是GBK(操作系统是中文简体):如果操 ...

  7. yum安装pip命令

    pip命令是python里的命令,类似于linux系统里的yum命令 我们只需要安装python-pip这个包即可. yum -y install  python-pip 在linux下还有一个命令: ...

  8. [NodeJS]Jenkins-cli

    使用npm 包nestor 触发jenkins job, 达到命令行管理Jenkins功能. 1. install nestor : npm install -g nestor 2. set JENK ...

  9. vue混入函数问题

    vue开发时,遇到个问题, import mxTable from "#mixin/table"; 导入了一个混入mxTable,但是该混入函数中import了其他的js代码,此时 ...

  10. urllib和urllib3

    urllib库 urllib 是一个用来处理网络请求的python标准库,它包含4个模块. urllib.request---请求模块,用于发起网络请求 urllib.parse---解析模块,用于解 ...