精华内容
下载资源
问答
  • Android接口调用

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

    首先加入发送请求的类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

     

    展开全文
  • 主要介绍了Android编程判断网络是否可用及调用系统设置项的方法,涉及Android针对网络连接的判定及属性设置的调用,需要的朋友可以参考下
  • 本文实例讲述了Android编程判断网络是否可用及调用系统设置项的方法。分享给大家供大家参考,具体如下:private boolean checkNetwork() {boolean flag = false;ConnectivityManager manager = (ConnectivityManager...

    本文实例讲述了Android编程判断网络是否可用及调用系统设置项的方法。分享给大家供大家参考,具体如下:

    private boolean checkNetwork() {

    boolean flag = false;

    ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    if (manager.getActiveNetworkInfo() != null)

    flag = manager.getActiveNetworkInfo().isAvailable();

    if (!flag) {

    Builder b = new AlertDialog.Builder(this).setTitle("没有可用的网络").setMessage(

    "请开启GPRS或WIFI网络连接");

    b.setPositiveButton("确定", new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int whichButton) {

    Intent mIntent = new Intent("/");

    ComponentName comp = new ComponentName("com.android.settings",

    "com.android.settings.WirelessSettings");

    mIntent.setComponent(comp);

    mIntent.setAction("android.intent.action.VIEW");

    startActivity(mIntent);

    }

    }).setNeutralButton("取消", new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int whichButton) {

    dialog.cancel();

    }

    }).create();

    b.show();

    }

    return flag;

    }

    权限是少不了的:

    希望本文所述对大家Android程序设计有所帮助。

    展开全文
  • android Retrofit+OKhttp实现接口调用base类,资源保存,方便自己or他人开发使用
  • 我的有一篇博客上讲了如何基于CXF搭建webservice,service层的接口会被部署到tomcat上,这一篇我就讲一下如何在安卓调用这些接口传递参数。 1.在lib中放入ksoap2的jar包并导入 2.在xml 配置文件中加入: <!-- ...
  • 搜索热词下面是编程之家 jb51.cc 通过网络收集整理的代码片段。编程之家小编现在分享给大家,也给大家做个参考。// Code in Activitytry {Socket sock = new Socket("192.168.199.245",9100); // ip and port of ...

    搜索热词

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

    编程之家小编现在分享给大家,也给大家做个参考。

    // Code in Activity

    try {

    Socket sock = new Socket("192.168.199.245",9100); // ip and port of printer

    PrintWriter oStream = new PrintWriter(sock.getOutputStream());

    oStream.println("\t\t Text to The Printer");

    oStream.println("\n\n\n");

    oStream.close();

    sock.close();

    } catch (UnknownHostException e) {

    e.printStackTrace();

    } catch (IOException e) {

    e.printStackTrace();

    }

    以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    总结

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

    展开全文
  • android java 调用delphi DX10 datasnap 接口 网络连接不成功的解决办法
  • 背景知识:okhttp已是安卓项目中被广泛使用的网络请求开源库,它有如下特性:1.支持http/2,允许所有同一个主机地址的请求共享同一个socket连接;2.连接池减少请求延时;3.缓存响应内容,避免一些完全重复的请求;4....

    研发中心/王鹏 2019年7月

    关键词:okhttp,安卓,连接复用,开源软件bug

    一.背景知识:

    okhttp已是安卓项目中被广泛使用的网络请求开源库,它有如下特性:

    1.支持http/2,允许所有同一个主机地址的请求共享同一个socket连接;

    2.连接池减少请求延时;

    3.缓存响应内容,避免一些完全重复的请求;

    4.透明的gzip压缩减少响应数据的大小;

    其中前三点特性可理解为就是连接复用,但后来发现这里有坑~

    二.问题现象:

    据现场端反馈,即使在网络正常的情况下,也会有个别设备会在某个时段内出现支付缓慢,多笔交易连续失败的情况。

    通过业务保障平台发现订单查询接口一直出现sockettimeoutexception。

    2aa14d3729f0a58053c3421307338d59.png

    三.问题原因:

    如果okhttp第一次出现sockettimeoutexception,后续即使网络已经恢复正常,请求也始终返回sockettimeoutexception,必须等到双活域名切换或者重新连接wifi,或重新启动应用程序才能恢复正常。

    四.排查过程:

    根据以上日志分析,可发现一个规律:切换(双活机房)基础域名时,请求便恢复正常,基本符合okhttp源码中不复用之前连接的条件:

    b96c615b5ce4115247b7261990001308.png

    所以我初步怀疑这是连接复用的特性导致的:

    即问题出现之后,一直在复用错误的连接,而域名切换之后,不再复用之前的错误连接,于是请求恢复正常。

    但项目中的连接池复用一直采用的是okhttp默认设置的配置,未做其他改动,所以怀疑okhttp有bug。

    查看okhttp github的issues,发现2019年4月26号新增了一条issues,与我们的问题类似。问题如下:

    b5e5d5d137185486370bb0130028343a.png

    内容大致意思为:部分设备出现了sockettimeout后,后续请求一直返回sockettimeout,尤其是在4g网络下比较常见!目前该问题仍未解决,处于开放状态,bug依旧存在。

    五.解决方法:

    在全局 responseerror 监听器里,如果发现出现 sockettimeout 就清空连接池:

    6522e8200a9af429fde637f313411261.png

    目前此方案的缺点是应用程序出现sockettimeout一次,下一次访问才能成功,当前请求无法修正。

    后续会持续关注此issues修复状态,及时更新。

    七.经验教训:

    1.使用第三方开源库,一定要熟悉其原理,在使用前一定要通篇了解其issues中反馈的各种问题,评估其影响,平常定期不定期关注其issues更新。p.s.:郑总的《》,已给我们打过预防针了。

    2.做好边界测试和压力测试。

    3.一定要重视线上问题,明确根本原因并评估其影响。之前惯性地认为sockettimeout就是网络状况不好导致的,未引起足够重视。

    八.rca类型:

    开源软件的bug

    -eof-

    欢迎关注公众号:老兵笔记,讲述那些年我们一起犯过的错

    展开全文
  • 开发Android网络App,通讯方式决定了你App所需的能力!最近正在用Web Service进行通讯,那么就让我来讲讲Web Service吧!一、了解Web Service是什么?二、基于Android调用WebService的方式这里我们不讲HTTP模拟方式...
  • //AppConfig.BASE_USER_REGISTER为我在另一文件写的固定常量后台接口路劲 readNet(AppConfig.BASE_USER_REGISTER,user.getText().toString(),pass.getText().toString(),nick.getText().toString()); } } public ...
  • 将http api和接口绑定,然后由框架生成接口的代理类,无需自己发送 http 请求,直接调用接口的方法就会自动构建请求参数并发送请求,然后处理请求响应转换为接口方法的返回值返回(支持泛型)。
  • Android通过WebService调用接口

    万次阅读 热门讨论 2016-08-02 17:28:30
    相信大家在平常的开发中,对网络的操作用到HTTP协议比较多,通过我们使用Get或者Post的方法调用一个数据接口,然后服务器给我们返回JSON格式的数据,我们解析JSON数据然后展现给用户,相信很多人很喜欢服
  • Android编程中的网络数据上传及WebService调用集,这里面一共包括了5个例子,分别是:  AndroidInteractWithWebService 通过网络WebService查询手机号码归属地的小示例  ServerForGETMethod 一些获取数据方法的...
  • Android9.0手机调用接口全部失败

    千次阅读 2019-02-13 22:50:14
    CLEARTEXT communication to host not permitted by network,刚开始有点懵逼,因为开发的app其他系统都是正常的,只有9.0的不行,后来百度才发现,由于 Android P 限制了明文流量的网络请求,非加密的流量请求都会...
  • 小小小小小白的记录接口调用学习过程,为了感受一下接口调用的通信过程和理解json,纯属练手和学习,仅仅记录学习过程 内容比较基础简单,也适合和我一样安卓零基础的朋友参考~~ 实现的功能简述: 调用北京时间的...
  • Android网络编程

    2018-05-30 16:14:27
    任务:如何在手机端使用HTTP协议和...调用控件的一些属性,在AndroidManifest.xml中声明网络权限。2.使用HTTP协议访问网络Android上发送HTTP请求一般有两种方式:HttpURLConnection和HttpClient(Android6.0系统...
  • 根据安卓板子sdk开发的c#api 具有登录,修改账户名 ip地址 端口号 打开和关闭视频和远程连接ip以及网点机构号id还有状态码接收的功能 网络连接方式为soket 接收视频数据为UDP协议
  • Android编程获取网络连接状态(3G/Wifi)及调用网络配置 获取网络连接状态  随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能。  ...
  • ,Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常);-- Android包 : android.net 包 (1接口, 19类, 3枚举, 1异常), android.net.http 包...
  • 我们在平常的开发中,对网络的操作用到HTTP协议比较多,通过我们使用Get或者Post的方法调用一个数据接口,然后服务器给我们返回JSON格式的数据,我们解析JSON数据然后展现给用户,相信很多人很喜欢服务器给我们返回...
  • 本篇文章的需求前提:移动端需通过接口将图片文件传至Python接口中进行物理模型分析,Java图片转的Base64无法被Python解析;解决思路:试了N多种Java转仍无果后,决定尝试用JS去转,过程坎坷终结果成功。 Html片段...
  • android 调用网络api

    千次阅读 2017-06-22 14:32:26
    ...获取网络信息需要在AndroidManifest.xml文件中加入相应的权限。 1)判断是否有网络连接 public boolean isNetworkConnected(Context context) { if (context != null) { 

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 120,291
精华内容 48,116
关键字:

安卓网络接口调用