从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. Oracle ocp 12c-071最新考试题库及答案-1

    choose the best answer: View the Exhibit and examine the structure of the CUSTOMERS table. CUSTOMER_ ...

  2. 在Java中如何优雅地判空

    判空灾难 ​ 作为搬砖党的一族们,我们对判空一定再熟悉不过了,不要跟我说你很少进行判空,除非你喜欢NullPointerException. 不过NullPointerException对于很多猿们来 ...

  3. each和foreach的区别

    each和foreach的区别是什么,我一直忘了还有这一茬,现在把这个总结一下,以备后用. 1.foreach是js的原生方法:each是jq的方法: 例如: var arr = ['mary','j ...

  4. [Maven实战-许晓斌]-[第二章]-2.7-2.8 Mave安装的最优建议和安装小结

    2.7

  5. 洛谷P4705 玩游戏(生成函数+多项式运算)

    题面 传送门 题解 妈呀这辣鸡题目调了我整整三天--最后发现竟然是因为分治\(NTT\)之后的多项式长度不是\(2\)的幂导致把多项式的值存下来的时候发生了一些玄学错误--玄学到了我\(WA\)的点全 ...

  6. 编译的 Ruby 2.3.0 缺少 openssl 支持的解决方法 (已解决)

    我的系统是centos 7.5,已离线安装ruby-2.3.0,openssl-1.0.2l,rubygems-2.7.4 如下图: 但是在  gem sources -a http://gems.r ...

  7. leetcode-812-Largest Triangle Area

    题目描述: You have a list of points in the plane. Return the area of the largest triangle that can be fo ...

  8. CoreText 图文混排

    基本原理 https://www.cnblogs.com/purple-sweet-pottoes/p/5109413.html CoreText(一):基本用法  https://blog.csdn ...

  9. 4KM

    ip addr add 10.9.8.100/24 broadcast + dev eth0 /etc/sysconfig/network-scripts/ifcfg-eth0 ifdown eth0 ...

  10. rest-framework框架组件

    序列化组件 创建一个序列化类, 视图四种方式 以下代码都需要创建一个serializers.py文件 from rest_framework import serializers from CBV_a ...