Android接口调用

首先加入发送请求的类InternetRequest,随便放在一个包里。

package com.example.administrator.xhello;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;

public class InternetRequest {
    //参数列表  <键-值>
	private HashMap<String, String> stringMap;
	
	public InternetRequest() {
		stringMap = new HashMap<String, String>();
	}
	
	public void addPara(String key, String value) {
		stringMap.put(key, value);
	}

	//发送请求函数
	public String requestPost(String baseUrl) {
		StringBuilder tempParams = new StringBuilder();
        int pos = 0;
        
        try {
            for (String key : stringMap.keySet()) {
                if (pos > 0) {
                    tempParams.append("&");
                }
                tempParams.append(String.format("%s=%s", key, URLEncoder.encode(stringMap.get(key), "utf-8")));
                pos++;
            }
            String s = tempParams.toString();
            //获取网络上get方式提交的整个路径
            URL url=new URL(baseUrl);
            //打开网络连接
            HttpURLConnection conn= (HttpURLConnection) url.openConnection();
            //设置提交方式
            conn.setRequestMethod("POST");
            //设置网络超时时间
            conn.setConnectTimeout(5000);
            //获取请求头
            conn.setRequestProperty("Content-Length",s.length()+"");//键是固定的
            conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");//键和值是固定的
            //设置允许对外输出数据
            conn.setDoOutput(true);
            //把界面上的所有数据写出去
            OutputStream os=conn.getOutputStream();
            os.write(s.getBytes());
            if(conn.getResponseCode()==200){
                //用io流与web后台进行数据交互
//	    		InputStream is=conn.getInputStream();
                //字节流转字符流
//	    		BufferedReader br=new BufferedReader(new InputStreamReader(is));
                //读出每一行的数据
//	    		String str=br.readLine();
                //返回读出的每一行的数据
                String result = streamToString(conn.getInputStream());
                return result;
//                Log.e(TAG, "Post方式请求成功,result--->" + result);
            }
            return "XXX";
        } catch (Exception e)  {
        	e.printStackTrace();
            return e.getStackTrace().toString();
        }
	}
	
	public String streamToString(InputStream is) {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = is.read(buffer)) != -1) {
                baos.write(buffer, 0, len);
            }
            baos.close();
            is.close();
            byte[] byteArray = baos.toByteArray();
            return new String(byteArray);
        } catch (Exception e) {
        	e.printStackTrace();
            return null;
        }
    }
}

 

接下来测试注册功能

activity_main.xml代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="1">


    <EditText
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入用户名:"/>

    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入密码:"/>

    <EditText
        android:id="@+id/telephone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入手机号:"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="register"
        android:text="注册" />

    <TextView
        android:id="@+id/txtshow"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.30" />

</LinearLayout>

页面显示

MainActivity.java代码

package com.example.administrator.xhello;


import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    String TAG = MainActivity.class.getCanonicalName();

    private TextView txtshow;

    //接受页面文本用于填充参数列表
    private EditText name;
    private EditText password;
    private EditText telephone;

    //加入一个发送请求的IR
    private InternetRequest IR;
    //加入一个接受响应结果的result
    private String result;

    public Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            if (msg.what == 1) {
                txtshow.setText(result);
            }
        };
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        name = (EditText) findViewById(R.id.name);
        password = (EditText) findViewById(R.id.password);
        telephone = (EditText) findViewById(R.id.telephone);
        txtshow = (TextView) findViewById(R.id.txtshow);

        //创建请求对象
        IR = new InternetRequest();
    }

    public void register(View view) {
        //将发送请求所需参数添加进参数列表
        IR.addPara("name", name.getText().toString());
        IR.addPara("password", password.getText().toString());
        IR.addPara("telephone", telephone.getText().toString());
        IR.addPara("birthday", " ");
        IR.addPara("age", " ");
        IR.addPara("sex", " ");
        IR.addPara("job", " ");
        IR.addPara("email", " ");

        //因为主线程不能进行网络请求,所以另建一个线程进行请求
        new Thread(postRun).start();

    }

    //请求线程
    Runnable postRun = new Runnable() {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                //发送对应请求,每个功能都有对应的url
                // result用于接收传回的数据,一般为json形式,如果有特殊需要也可以进行更改
                result = IR.requestPost("url");
                Log.e(TAG, "Result:"+result);
                Message message = new Message();
                message.what = 1;
                handler.sendMessage(message);
            }catch (Exception e){
                Log.e(TAG, "Exception:"+e.getStackTrace().toString());
            }
        }
    };
}

 

登录测试

activity_main.xml代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="1">


    <EditText
        android:id="@+id/telephone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入手机号:"/>

    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入密码:"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="login"
        android:text="登录" />

    <TextView
        android:id="@+id/txtshow"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.30" />

</LinearLayout>

页面显示

MainActivity.java代码

package com.example.administrator.xhello;


import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    String TAG = MainActivity.class.getCanonicalName();

    private TextView txtshow;

    //接受页面文本用于填充参数列表
    private EditText telephone;
    private EditText password;

    //加入一个发送请求的IR
    private InternetRequest IR;
    //加入一个接受响应结果的result
    private String result;

    public Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            if (msg.what == 1) {
                txtshow.setText(result);
            }
        };
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        telephone = (EditText) findViewById(R.id.telephone);
        password = (EditText) findViewById(R.id.password);
        txtshow = (TextView) findViewById(R.id.txtshow);

        //创建请求对象
        IR = new InternetRequest();
    }

    public void login(View view) {
        //将发送请求所需参数添加进参数列表
        IR.addPara("telephone", telephone.getText().toString());
        IR.addPara("password", password.getText().toString());

        //因为主线程不能进行网络请求,所以另建一个线程进行请求
        new Thread(postRun).start();

    }

    //请求线程
    Runnable postRun = new Runnable() {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                //发送对应请求,每个功能都有对应的url
                // result用于接收传回的数据,一般为json形式,如果有特殊需要也可以进行更改
                result = IR.requestPost("url");
                Log.e(TAG, "Result:"+result);
                Message message = new Message();
                message.what = 1;
                handler.sendMessage(message);
            }catch (Exception e){
                Log.e(TAG, "Exception:"+e.getStackTrace().toString());
            }
        }
    };
}

 

调用其它接口主要需要修改的地方,只有按钮点击响应函数中(这次测试用的是android:onClick方式,响应函数为MainActivity.java中的register和login)添加参数的部分,请求需要什么参数就添加什么

以及postRun中的url

 

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Android Studio接口调用是指在Android应用程序中使用API(应用程序接口)来访问外部服务或资源。这些API可以是来自Android操作系统本身的,也可以是来自第三方库或服务的。在Android Studio中,可以使用Java或Kotlin编写代码来调用这些API,并将其集成到应用程序中。例如,可以使用Google Maps API来在应用程序中显示地图,或使用Twitter API来访问Twitter的数据。 ### 回答2: Android Studio是一种功能强大的集成开发环境(IDE),它用于Android应用程序的开发和实现。Android Studio被广泛使用,因为它提供了一个完整的SDK(软件开发工具包),用于开发Android应用程序所需的所有工具和资源。 要调用Android Studio中的接口,需要遵循以下步骤: 1.创建新的Android项目并打开Android Studio。 2.在项目中选择“Activity”或“Fragment”作为要使用的UI组件。 3.打开要使用的UI组件的XML文件并添加一个按钮或文本框等UI元素。 4.在Java代码中,创建一个回调方法并将其添加为UI组件的监听器。回调方法将在用户与UI元素交互时运行,并调用相关的接口函数。 5.查找接口文档,以了解要调用的函数和参数。 6.创建一个调用接口函数的类,并在其内部实现函数的调用。该函数应该将UI中的参数和其它必要的信息传递给接口函数。 7.在主Activity或Fragment中调用该类并执行接口函数。该函数将使用传递的参数调用API,并返回结果。 8.解析API返回的数据并将其显示在UI组件中。 9.测试应用程序以确保它可以正确调用接口并正确显示数据。 总之,使用Android Studio进行接口调用需要仔细研究文档,了解调用方法,并且使用正确的代码和参数。在进行调用之前,请确保检查所有的安全性和错误处理方法。这将有助于确保您的应用程序在任何情况下都能够保持高效和无故障运行。 ### 回答3: Android Studio是一款功能强大的Android开发工具,可以帮助开发者快速建立Android应用,并提供了许多API和界面库供开发者使用。接口调用Android开发中非常常见和重要的一部分,它可以允许不同的组件、库和应用程序之间进行互操作。 首先,我们需要先理解什么是接口。在计算机科学中,接口定义了一个协定,描述了一个软件组件可以响应和请求什么操作。在Android开发中,接口充当了将不同组件之间联系在一起的桥梁。我们可以通过调用接口使用其他组件的功能,同时,也可以实现自己的接口,让其他应用程序或组件使用我们的功能。 在Android Studio中,我们可以通过以下步骤对接口进行调用: 1. 添加依赖:在使用某个库或组件时,需要在项目中添加依赖。可以在网上查找相应的依赖关系,然后将其添加到build.gradle文件中,或者通过右键单击模块并选择“Open module settings”来添加它们。 2. 实现接口:当我们需要使用某个库或组件的功能时,我们首先需要实现库或组件提供的接口。这可以通过继承该库或组件的相应类,并实现接口进行实现。 3. 调用接口:完成接口实现后,我们可以通过创建实例并调用接口方法来对其进行调用。 其中,Android Studio提供了一些工具和技术来简化接口调用的过程。一些常用的工具和技术包括: 1. Intent:Intent是Android应用程序之间通信的标准机制,可以通过指定Intent来调用其他组件的功能或启动其他应用程序。 2. BroadcastReceiver:BroadcastReceiver是一类特殊的组件,用于监听和响应来自系统或其他应用程序的广播消息。 3. ContentProvider:ContentProvider是一种机制,用于允许应用程序以统一的方式访问和共享数据存储。 总之,Android Studio提供了许多工具和技术来简化接口调用的过程,使得开发者可以更快速地实现组件之间的互操作。熟练掌握这些工具和技术,可以大大提高我们的开发效率和应用程序的质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凛风业火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值