xamarin用get的方法把json值传给php写的服务端登录页
最近,抽空写了个用xamarin写个android传json给php服务端的程序,作为登录页使用,需要system.json组件,php端直接get到数据放进json里,不多说了,上代码,先搞个php服务端的,局域网内可以跨网段使用,亲测。
这是服务端上 6.php页面代码
<?php
// array for JSON response
$response = array();
// check for required fields
if (isset($_GET['name']) && isset($_GET['password']) )
{
$name = $_GET['name'];
$pwd = $_GET['password'];
if($name=="aaa" & $pwd=="222")
{
// successfully inserted into database
$response["success"] = 1;
$response["message"] = "sucess";
// echoing JSON response
echo json_encode($response);
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "成功";
fwrite($myfile, $txt);
fclose($myfile);
}
else
{
// failed to insert row
$response["success"] = 0;
$response["message"] = "name or password is wrong";
// echoing JSON response
echo json_encode($response);
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "用户名或密码错误";
fwrite($myfile, $txt);
fclose($myfile);
}
}
else
{
// required field is missing
$response["success"] = 0;
$response["message"] = "the require is not compition ";
// echoing JSON response
echo json_encode($response);
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "缺少";
fwrite($myfile, $txt);
fclose($myfile);
}
?>
xamarin安卓端的代码如下:
先来个ui界面的代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linearLayout1">
<TextView
android:text="用户名:"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/textView1" />
<EditText
android:inputType="textMultiLine"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/editText1" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linearLayout3">
<TextView
android:text="密码:"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/textView2" />
<EditText
android:inputType="date"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/editText2" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linearLayout2"
android:gravity="center">
<Button
android:text="登录"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/button1" />
</LinearLayout>
</LinearLayout>
MainActivity.cs的代码
using Android.App;
using Android.Widget;
using Android.OS;
using System.Json;
using System.Net;
using System.IO;
using System;
using Android.Content;
using System.Linq;
namespace App10
{
[Activity(Label = "App10", MainLauncher = true)]
public class MainActivity : Activity
{
Button btn_login;
EditText txt_name;
EditText txt_pwd;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
btn_login = FindViewById<Button>(Resource.Id.button1);
txt_name = FindViewById<EditText>(Resource.Id.editText1);
txt_pwd = FindViewById<EditText>(Resource.Id.editText2);
btn_login.Click += Btn_lgoin_Click;
}
private void Btn_lgoin_Click(object sender, System.EventArgs e)
{
string name = txt_name.Text;
string pwd = txt_pwd.Text;
if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(pwd))
{
Toast.MakeText(this, "请输入用户名和密码!!", ToastLength.Long).Show();
return;
}
else
{
//JSON请求URL GET的方式
string url = "http://192.168.0.45:8081/jsontest/6.php?name="+name+"&password="+pwd;
//创建一个请求
var httpReq = (HttpWebRequest)HttpWebRequest.Create(new Uri(url));
httpReq.BeginGetResponse(new AsyncCallback(ReadXamarin), httpReq);
}
}
//异步回调方法
public void ReadXamarin(IAsyncResult asyn)
{
var httpReq = (HttpWebRequest)asyn.AsyncState;
//获取响应
using (var httpRes = (HttpWebResponse) httpReq.EndGetResponse(asyn))
{
//判断是否成功获取响应
if (httpRes.StatusCode == HttpStatusCode.OK)
{
//读取响应
var text = new StreamReader(httpRes.GetResponseStream()).ReadToEnd();
//切换到UI线程,否则无法对控件进行操作
RunOnUiThread(() =>
{
Toast.MakeText(this, text, ToastLength.Long).Show();
});
}
}
}
}
}