1. 程式人生 > >SpringMVC與安卓之間的互動1

SpringMVC與安卓之間的互動1

接著上一篇 springMVC與jsp的互動,今天有空就測試了一下與安卓的互動
其實安卓與servlet互動和安卓與SpringMVC的互動一樣就是改變一下,目前我用的是get方法訪問SpringMVC,由於伺服器程式沿用的是與上次jsp一樣的程式碼,所以間接的進行了一次資料互動,把jsp的頁面程式碼傳到安卓上面來了
環境宣告 :伺服器環境與上一篇一樣,安卓使用的是 Android studio 2.3.3

1、主要程式碼解釋 #

A 伺服器端程式 ##

package com.springmvc.test1;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;

import com.springmvc.pojo.RoleParams;

@Controller
@RequestMapping("/tsetClass")
public class SpringMVCTest1 {

@RequestMapping("/testParams")
public ModelAndView testParams(String roleName,String note) throws Exception{

    System.out.println("roleName===" + roleName);
    System.out.println("note===" + note);
    ModelAndView mv = new ModelAndView();
    mv.setViewName("t2params");//請看下面的圖片    
    return mv;      
}

}


mv.setViewName(“t2params”);就是把jsp中的內容返回了給安卓APP,角色名稱、備註都只是個標識,在介紹安卓APP的時候就會發現APP上有同樣的字眼

B 安卓APP程式 ##

package com.hemycoo.server.androidserverv1;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.hemycoo.server.androidserverv1.utils.HttpUtils;
import com.hemycoo.sever.javabean.Test;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Response;


public class MainActivity extends AppCompatActivity {


private EditText ed_number;
private EditText ed_pwd;
private TextView tv_status;

String path;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ed_number = (EditText) findViewById(R.id.ed_number);
    ed_pwd = (EditText) findViewById(R.id.ed_pwd);
    tv_status = (TextView) findViewById(R.id.login_status);

}

public void login(View v) throws IOException {

    // 獲得 QQ號碼和 密碼 , 然後登入
    final String number = ed_number.getText().toString().trim();
    final String pwd = ed_pwd.getText().toString().trim();

    if (TextUtils.isEmpty(number) || TextUtils.isEmpty(pwd)) {
        Toast.makeText(this, "號碼或者密碼不能為空", Toast.LENGTH_SHORT).show();
        return;
    }
//使用okhtttp連線伺服器
    path = "http://10.149.72.101:8080/SpringMVC1024/tsetClass/testParams.action?roleName="+number+"&"+"note="+pwd;
//其中10.149.72.101為你本機的ip
    HttpUtils.sendHttpRequest(path, new okhttp3.Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            //Toast.makeText(MainActivity.this, "連線錯誤",Toast.LENGTH_SHORT).show();
            Log.e("okhttpOnFailer", "連線失敗");
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {

            String responseData = response.body().string();
            if(responseData == null){
                tv_status.setText("null");
                return;
            }

            showResponse(responseData);
        }
    });

}

private void showResponse(final String response) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            // 在這裡進行UI操作,將結果顯示到介面上
            tv_status.setText(response);
        }
    });
}
}

其中okhttp的使用才是聯網的重點,下面我先把我的工程目錄截圖,再貼上okhttp聯網工具我封裝的程式碼

package com.hemycoo.server.androidserverv1.utils;

import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;

public class HttpUtils {
public static final MediaType JSON= MediaType.parse("application/json; charset=utf-8");

public static void sendHttpRequest(String address,okhttp3.Callback callback){
    OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder()
            .url(address)
            .build();
    client.newCall(request).enqueue(callback);
}

public static void sendHttpRequestPost(String path, String json, okhttp3.Callback callback) {
    OkHttpClient client = new OkHttpClient();

    RequestBody requestBody = RequestBody.create(JSON ,json);


    Request request = new Request.Builder()
            .url(path)
            .post(requestBody)
            .build();
     client.newCall(request).enqueue(callback);
}

}  

我用的okhttp不是最新的,如有需要可以百度一下或者谷歌一下在github上會有新版本的介紹

2 效果顯示 #

A 首先是伺服器端 ##


前面兩個是網址測試時候列印的,圈出來的是APP提交的。

B APP介面 ##


可以看出來賬號密碼就是提交給SpringMVC的,而下面的內容就是jsp的內容,就是伺服器返回的
至此呢springMVC與前端的互動就完成了,雖然是基本的,但也足夠了,別的只不過是在這個基礎這個原理上的延伸。
與SpringMVC互動就是與SSM互動,都是一樣的,這些都是簡單的資料互動,與前端最大的困難其實就是資料互動,接下來遇到的新的資料互動問題在有空的時候再進行更新吧,寫這篇主要是給初學者看的,畢竟培訓機構也沒有講SpringMVC之類的與安卓的互動,網上的內容也不太多,我的程式在我的電腦上是完全能夠執行的,看到這篇文章還有疑問的歡迎評論交流,說不定可以成為好朋友呢?