凌雪
2018-10-24
来源 :网络
阅读 1346
评论 0
摘要:本文将带你了解Android应用开发之android向阿里云服务器的数据传输功能实现教程,希望本文对大家学Android有所帮助。
本文将带你了解Android应用开发之android向阿里云服务器的数据传输功能实现教程,希望本文对大家学Android有所帮助。
查阅了很多资料,修改了别人的代码,终于实现了android向阿里云服务器的数据传输功能。以下说说自己的步骤:
1、软硬件环境
Android Studio 3.2.2阿里云服务器 ( Windows Sever 2012 )软件集成包XAMPP(Apach、 MySql)小米4
2、创建MySQL数据库persondb 以及 表persons
3、服务器端代码
a.先写个配置文件db_config.php
<!--phpdefine('DB_USER', "root"); // db userdefine('DB_PASSWORD', "root"); // db password (mention your db password here)define('DB_DATABASE', "persondb"); // database namedefine('DB_SERVER', "localhost"); // db server-->
b.连接MySQL数据库的文件db_connect.php
<!--phpfunction connect() { /*包含并运行指定的文件*/ // import database connection variables require_once __DIR__ . '/db_config.php'; global $con; // Connecting to mysql database $con = mysqli_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die(mysqli_connect_error()); // Selecing database $db = mysqli_select_db($con,DB_DATABASE) or die(mysqli_error($con)) ; // returing connection cursor return $con; } /** * Function to close db connection*/ function close() { // closing db connection global $con; mysqli_close($con); } -->
c. Android客户端从MySQL数据库里获取数据的文件get_all_persons.php
<!--php /* * Following code will list all the products */ // array for JSON response$response = array(); // include db connect classrequire_once __DIR__ . '/db_connect.php'; // connecting to dbconnect(); // get all products from products table$result = mysqli_query($con,"SELECT *FROM persons") or die(mysqli_error()); // check for empty resultif (mysqli_num_rows($result) --> 0) { // looping through all results // products node $response["persons"] = array(); while ($row = mysqli_fetch_array($result)) { // temp user array $info = array(); $info["Id_P"] = $row["Id_P"]; $info["LastName"] = $row["LastName"]; $info["FirstName"] = $row["FirstName"]; $info["Address"] = $row["Address"]; $info["City"] = $row["City"]; // push single product into final response array array_push($response["persons"], $info); } // success $response["success"] = 1; // echoing JSON response echo json_encode($response);} else { // no products found $response["success"] = 0; $response["message"] = "No products found"; // echo no users JSON echo json_encode($response);} close();>
d.Android客户端向MySQL数据库插入数据的文件create_person.php
<!--php $result = file_get_contents('php://input'); $object=json_decode($result); $Id_P = $object--->{'Id_P'}; $LastName=$object->{'LastName'}; $FirstName=$object->{'FirstName'}; $Address=$object->{'Address'}; $City=$object->{'City'}; /* * Following code will create a new person row * All person details are read from HTTP Post Request */ // array for JSON response $response = array(); // check for required fieldsif (isset($Id_P) || isset($LastName) || isset($FirstName) || isset($Address) || isset($City)) { // include db connect class require_once __DIR__ . '/db_connect.php'; // connecting to db connect(); // mysql inserting a new row $result = mysqli_query($con,"INSERT INTO persons(Id_P,LastName,FirstName,Address,City) VALUES('$Id_P', '$LastName','$FirstName','$Address','$City')"); // check if row inserted or not if ($result) { // successfully inserted into database $response["success"] = 1; $response["message"] = "Person successfully created."; // echoing JSON response echo json_encode($response); } else { // failed to insert row $response["success"] = 0; $response["message"] = "Oops! An error occurred."; // echoing JSON response echo json_encode($response); }} else { // required field is missing $response["success"] = 0; $response["message"] = "Required field(s) is missing"; // echoing JSON response echo json_encode($response);}>
注意: 创建一个文件夹android_connect,把以上的所有php文件都放在该文件夹里,并把android_connect 文件夹放在xampp安装目录里htdocs文件夹下。
4.Android客户端通过网络访问MySQL数据库
先上布局文件activity_main.xml
<!--xml version="1.0" encoding="utf-8"--><relativelayout android:id="@+id/activity_main" android:layout_height="match_parent" android:layout_width="match_parent" tools:context="com.android.androidconnectserver.MainActivity" xmlns:android="https://schemas.android.com/apk/res/android" xmlns:tools="https://schemas.android.com/tools"><button android:id="@+id/Send" android:layout_centerhorizontal="true" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="向MYSQL数据库插入数据"></button><button android:id="@+id/Receive" android:layout_below="@id/Send" android:layout_centerhorizontal="true" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="从MYSQL数据库获取数据"> <textview android:id="@+id/textView" android:layout_below="@id/Receive" android:layout_height="wrap_content" android:layout_margintop="5dp" android:layout_width="wrap_content" android:text="textView" android:textsize="20sp"></textview></button></relativelayout>
该布局文件是Android客户端向MySQL数据库插入数据时的一个自定义对话框的布局文件dialog_custom.xml
<!--xml version="1.0" encoding="utf-8"--><linearlayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" xmlns:android="https://schemas.android.com/apk/res/android"> <linearlayout android:layout_height="wrap_content" android:layout_width="match_parent" android:orientation="horizontal"> <textview android:layout_height="wrap_content" android:layout_width="wrap_content" android:paddingleft="10dp" android:text="Id_P :"> <edittext android:hint="请输入信息" android:id="@+id/et_Id_P" android:layout_height="wrap_content" android:layout_marginleft="10dp" android:layout_width="wrap_content"> </edittext></textview></linearlayout> <linearlayout android:layout_height="wrap_content" android:layout_width="match_parent" android:orientation="horizontal"> <textview android:layout_height="wrap_content" android:layout_width="wrap_content" android:paddingleft="10dp" android:text="LastName :"> <edittext android:hint="请输入信息" android:id="@+id/et_LastName" android:layout_height="wrap_content" android:layout_marginleft="10dp" android:layout_width="wrap_content"> </edittext></textview></linearlayout> <linearlayout android:layout_height="wrap_content" android:layout_width="match_parent" android:orientation="horizontal"> <textview android:layout_height="wrap_content" android:layout_width="wrap_content" android:paddingleft="10dp" android:text="FirstName :"> <edittext android:hint="请输入信息" android:id="@+id/et_FirstName" android:layout_height="wrap_content" android:layout_marginleft="10dp" android:layout_width="wrap_content"> </edittext></textview></linearlayout> <linearlayout android:layout_height="wrap_content" android:layout_width="match_parent" android:orientation="horizontal"> <textview android:layout_height="wrap_content" android:layout_width="wrap_content" android:paddingleft="10dp" android:text="Address :"> <edittext android:hint="请输入信息" android:id="@+id/et_Address" android:layout_height="wrap_content" android:layout_marginleft="10dp" android:layout_width="wrap_content"> </edittext></textview></linearlayout> <linearlayout android:layout_height="wrap_content" android:layout_width="match_parent" android:orientation="horizontal"> <textview android:layout_height="wrap_content" android:layout_width="wrap_content" android:paddingleft="10dp" android:text="City :"> <edittext android:hint="请输入信息" android:id="@+id/et_City" android:layout_height="wrap_content" android:layout_marginleft="10dp" android:layout_width="wrap_content"> </edittext></textview></linearlayout></linearlayout>
最后出场Android端的代码,各位小伙伴们注意了。
package com.android.androidconnectserver; import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.os.Bundle;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView; import org.json.JSONException;import org.json.JSONObject; import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL; public class MainActivity extends AppCompatActivity { public static final String TAG="MainActivity"; private Button Send; private Button Receive; private TextView textView; private String response; private EditText inputId_P; private EditText inputLastName; private EditText inputFirstName; private EditText inputAddress; private EditText inputCity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); Receive.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { receive(); textView.setText(response); } }); Send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showDialog(); } }); } public void initViews(){ Send =(Button) findViewById(R.id.Send); Receive= (Button) findViewById(R.id.Receive); textView=(TextView) findViewById(R.id.textView); } /*从MySQL里获取数据*/ private void receive() { new Thread( new Runnable() { @Override public void run() { response=executeHttpGet(); } } ).start(); } private String executeHttpGet() { HttpURLConnection con=null; InputStream in=null; String path="https://127.0.0.1/android_connect/get_all_persons.php"; try { con= (HttpURLConnection) new URL(path).openConnection(); con.setConnectTimeout(5000); con.setReadTimeout(5000); con.setDoInput(true); con.setRequestMethod("GET"); if(con.getResponseCode()==200){ in=con.getInputStream(); return parseInfo(in); } } catch (IOException e) { e.printStackTrace(); } return null; } private String parseInfo(InputStream in) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(in)); StringBuilder sb=new StringBuilder(); String line=null; while ((line=br.readLine())!=null){ sb.append(line+"\n"); } Log.i(TAG, "parseInfo: sb:"+sb.toString()); return sb.toString(); } /*发送数据给MySQL数据库*/ private void showDialog(){ AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this); builder.setTitle("添加个人信息"); View view= View.inflate(MainActivity.this,R.layout.dialog_custom,null); builder.setView(view); builder.setPositiveButton("确定", new OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { String Id_P=inputId_P.getText().toString(); String LastName=inputLastName.getText().toString(); String FirstName=inputFirstName.getText().toString(); String Address=inputAddress.getText().toString(); String City=inputCity.getText().toString(); try { jsonObject.put("Id_P",Id_P); jsonObject.put("LastName",LastName); jsonObject.put("FirstName",FirstName); jsonObject.put("Address",Address); jsonObject.put("City",City); } catch (JSONException e) { e.printStackTrace(); }; send(); } }); builder.setNegativeButton("取消",new OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { } }); AlertDialog ad=builder.create(); ad.show(); inputId_P= (EditText)ad.findViewById(R.id.et_Id_P); inputLastName= (EditText)ad.findViewById(R.id.et_LastName); inputFirstName= (EditText)ad.findViewById(R.id.et_FirstName); inputAddress= (EditText)ad.findViewById(R.id.et_Address); inputCity= (EditText)ad.findViewById(R.id.et_City); } private void send() { new Thread(new Runnable() { @Override public void run() { executeHttpPost(); } }).start(); } JSONObject jsonObject=new JSONObject(); private void executeHttpPost() { String path="https://127.0.0.1/android_connect/create_person.php"; try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //conn.setConnectTimeout(3000); //设置连接超时时间 conn.setDoOutput(true); //打开输出流,以便向服务器提交数据 conn.setDoInput(true); //打开输入流,以便从服务器获取数据 conn.setUseCaches(false);//使用Post方式不能使用缓存 conn.setRequestMethod("POST"); //设置以Post方式提交数据 //conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Charset", "UTF-8"); // 设置文件类型: //conn.setRequestProperty("Content-Type","application/json; charset=UTF-8"); // 设置接收类型否则返回415错误 //conn.setRequestProperty("accept","*/*")此处为暴力方法设置接受所有类型,以此来防范返回415; conn.setRequestProperty("accept","application/json"); // 往服务器里面发送数据 String Json=jsonObject.toString(); System.out.println("----------- "+Json); if (Json != null && !TextUtils.isEmpty(Json)) { byte[] writebytes = Json.getBytes(); // 设置文件长度 conn.setRequestProperty("Content-Length", String.valueOf(writebytes.length)); OutputStream outwritestream = conn.getOutputStream(); outwritestream.write(Json.getBytes()); outwritestream.flush(); outwritestream.close(); Log.d("upload: ", "doJsonPost: "+conn.getResponseCode());//如输出200,则对了 } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
5.运行结果
a.向MySQL数据库插入数据
点击向MySQL数据库插入数据的按钮,在里面输入数据,单击确定就可以向数据库中插入数据了,通过查询数据库,可以查看数据是否插入成功。
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号