频道栏目
首页 > 程序开发 > 移动开发 > Android > 正文
android向阿里云服务器的数据传输功能实现教程
2018-05-14 15:28:31      个评论    来源:casgj16的博客  
收藏   我要投稿

查阅了很多资料,修改了别人的代码,终于实现了android向阿里云服务器的数据传输功能。以下说说自己的步骤:

1、软硬件环境

Android Studio 3.2.2阿里云服务器 ( Windows Sever 2012 )软件集成包XAMPP(Apach、 MySql)小米4

2、创建MySQL数据库persondb 以及 表persons

\

3、服务器端代码

a.先写个配置文件db_config.php

b.连接MySQL数据库的文件db_connect.php

c. Android客户端从MySQL数据库里获取数据的文件get_all_persons.php

 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

{'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 fields
if (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


该布局文件是Android客户端向MySQL数据库插入数据时的一个自定义对话框的布局文件dialog_custom.xml



    
        
        

    
    
        
        
    
    
        
        
    
    
        
        

    

    
    
    
     

最后出场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开发必知必会的27个知识点
下一篇:Android系统的架构和应用程序基本概念详细了解
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站