android移动端向本地服务端的传送数据

 

运行结果图android

1.Android端结果图json

 

2.本地服务端结果图tomcat

 

 

一 .实现内容服务器

实现android移动端与本地服务端进行数据传输,实现的结果为手机端向本地服务端传递数据,本地服务端在接收到数据以后再返回一个数据进行反馈。网络

二 .实现方法app

   2.1 数据传输的格式ide

      数据是以json的格式传输,在客户端进行上传前就须要将数据进行以json的格式进行封装,在服务端接收到数据以后,在要对接收到的json格式数据进行解析。最后再以一样格式的数据进行返回给客户端。工具

 

   2.2 访问网络的方法post

      使用HTTP协议进行访问网络,使用到的网络通讯库为OkHttp。gradle

   2.3 使用工具软件

      本文使用的工具为 Android Studio与MyEclipse,服务器为tomcat8.0, android虚拟机为 genymotion。

三 .实现代码

   3.1 客户端代码

public class MainActivity extends AppCompatActivity {

    private EditText TextInfo;
    private TextView Backtext;
    private Button button;
    public static final String TAG = "MainActivity";
    public static final MediaType JSON=MediaType.parse("application/json; charset=utf-8");

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

        TextInfo = findViewById(R.id.TextInfo);
        button = findViewById(R.id.button);
        Backtext = findViewById(R.id.backtext);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                UpLoad();
            }
        });
    }

    //向服务端传数据
    public void UpLoad(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpClient client = new OkHttpClient();  //建立request实例
                //处理Json类型数据放在异常处理中
                try{
                    //定义处理数据json
                    JSONObject json = new JSONObject();
                    //获取EditText上数据
                    String textInfo = TextInfo.getText().toString();
                    //设置json key-value
                    json.put("textinfo",textInfo);
                    //转换为字符串
                    String _json = json.toString();
                    //目标url地址
                    String url = "http://192.168.43.75:8080/AProject/Servlet";
                    RequestBody requestBody = RequestBody.create(JSON,_json);
                    Request request = new Request.Builder()
                            .url(url)
                            .post(requestBody)
                            .build();
                    //Log.i(TAG,"<===@===>");
                    //设置接反馈
                    Response response = client.newCall(request).execute();
                    if(response.isSuccessful()){
                        String Data = response.body().string();
                        Log.i(TAG,"<======"+Data+"======>");
                        parseJSON(Data);
                    }

                }catch (Exception e){
                    Log.i(TAG,"<=====出现错误=====>");
                    e.printStackTrace();
                }
            }
        }).start();
    }

    //打印显示反馈信息
    public void parseJSON(String jsonData){
        try {
            JSONObject json = new JSONObject(jsonData);
            //Log.i(TAG,json.getString("reply").toString());
            Backtext.setText(json.getString("reply").toString());
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

 注意事项:

  使用到了OkHttp,须要在项目中添加OkHttp库依赖,打开AS中的build.gradle,以下图所示添加

implementation "com.squareup.okhttp3:okhttp:3.11.0"

  

  通信过程当中须要访问网络所以须要为程序添加权限,打开AndroidManifest.xml,以下图所示添加:

<uses-permission android:name="android.permission.INTERNET" />

 

 

   3.2 服务端代码

@WebServlet("/Servlet")
public class Servlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/json");
        String acceptjson = "";//用于存储接收到的信息
        String Back="";//用于存储返回的信息
        System.out.println("/***********hello***********/");

        try{
            BufferedReader bufferedReader =
                    new BufferedReader(
                            new InputStreamReader(request.getInputStream()
                            , "utf-8")
                    );
            StringBuffer stringBuffersb = new StringBuffer();
            String temp;
            while((temp = bufferedReader.readLine()) != null){
                stringBuffersb.append(temp);
            }
            bufferedReader.close();
            acceptjson = stringBuffersb.toString();
            System.out.println("获取到的json格式数据: "+acceptjson);
            if(acceptjson!=""){
                JSONObject json = JSONObject.fromObject(acceptjson);              //解析获取数据
                String textinfo = json.getString("textinfo");
                System.out.println("解析到的数据: "+textinfo);
                Back = "本地服务端已获取数据: "+textinfo;
            }

        }catch(Exception e){
            System.out.println("发生未知错误");
            e.printStackTrace();
        }finally {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("reply",Back);
            PrintWriter pw = response.getWriter();
            pw.write(jsonObject.toString());
            System.out.println("传回的json数据: "+jsonObject.toString());
            pw.flush();
            pw.close();
            System.out.println("/***********world***********/");
        }
    }

}

注意事项:

   在服务端须要用到如下依赖包,下载后直接放在lib便可。

 

  

四 .其余注意事项

在程序书写完毕后,还须要进行如下一些步骤才能够实现两端的通信:

1. 客户端的url目标地址的修改

  本程序url的书写格式为

 

   

 

  打开控制台,输入 ipconfig/all,找到无线局域网适配器 WLAN下的IPv4 地址

 

  运行服务端代码,先在网页上进行访问,查看是否能够正常访问,而不是显示404。能够正常访问以后再修改客户端中的url。

 

2.  使用android进行与本地服务端数据传输

若是不使用android虚拟机而是用实体android手机进行数据传输,则须要将电脑与手机处于同一个局域网之下,笔记本电脑与手机链接同一个wifi,或者电脑链接手机热点。

相关文章
相关标签/搜索