Android通过Geth RPC接口实现接入以太坊私有链


环境:mac os & android studio

一、启动私有链

搭建方法见 here

启动并设定RPC端口:

geth --identity "linoy" --rpc --rpccorsdomain "*" --datadir "./" --port "30303" --nodiscover --rpcapi "personal,db,eth,net,web3,miner" --networkid 1999 console 2>>geth.log

需要注意的是rpcapi 参数:

这个命令指示了允许通过RPC访问的命令。默认情况下,Geth允许web3。当你准备使用不同的api接口时,在启动节点时要添加上不同的参数,比如你要使用rpc调用创建账户(personal操作),那么在启动的命令中就需要核实是否有–rpcapi参数,参数值中是否有personal选项,否则无法正常调用

二、Android studio新建项目并添加.jar包

下载地址:here

新建项目

选择project

导入jar包

将你要导入的jar包拖入libs文件夹内,然后

三、设置布局文件

四、设置权限

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

五、主代码

package com.example.pro.blockchain1;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.TextView;import org.alexd.jsonrpc.JSONRPCException;import org.alexd.jsonrpc.JSONRPCHttpClient;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class MainActivity extends AppCompatActivity implements View.OnClickListener{    private Button showButton;    private TextView textview;    public static final int SHOW = 0;    private Handler handler = new Handler() {        public void handleMessage(Message msg) {            switch (msg.what) {                case SHOW:                    String a = (String) msg.obj;                    textview.setText(a);            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        textview=(TextView)findViewById(R.id.textview);        showButton = (Button) findViewById(R.id.showView);        showButton.setOnClickListener(this);    }    @Override    public void onClick(View v) {        if(v.getId() == R.id.showView) {            show();        }    }    private void show() {        new Thread(new Runnable() {            @Override            public void run() {                try {                    String url = "http://10.0.2.2:8545";   //注意,不是127.0.0.1                    JSONRPCHttpClient client = new JSONRPCHttpClient(url);                    Map map = new HashMap();                    List paramsList = new ArrayList();                    map.put("json-rpc", "2.0");                    map.put("method", "web3_clientVersion");                    map.put("params", paramsList);                    map.put("id", "67");                    String st = client.callString("web3_clientVersion", map);                    Message msg = new Message();                    msg.what =SHOW;                    msg.obj = st;                    handler.sendMessage(msg);                } catch (JSONRPCException e) {                //    textview.setText("step wrong??");                    e.printStackTrace();                }            }        }).start();    }}

可以看到结果:

其他事例

String url = "http://10.0.2.2:8545";JSONRPCHttpClient client = new JSONRPCHttpClient(url);Map<String, Object> map = new HashMap();List paramsList = new ArrayList();map.put("id", "1");map.put("json-rpc", "2.0");map.put("params", paramsList);//personal_listAccountsString st = client.callString("personal_listAccounts", map);//personal_newAccountparamsList.add("123456");String st = client.callString("personal_newAccount", map);

参考文档:here & here

API文档:here & here

更多相关文章

  1. (四十一) Android(安卓)O SystemServer初探
  2. Android开发中用到的命令—整理贴
  3. 【Frida Hook 学习记录】Frida Hook Android(安卓)常用方法
  4. Android-Activity的四状态、七生命周期、和四启动模式
  5. android用服务service与广播broadcastreceiver创建开机启动服务
  6. mac下启动adb并安装apk
  7. Android系统锁屏启动流程(7.1.0)
  8. Android(安卓)启动分析-init进程&init.rc[转]
  9. Android(安卓)开机启动广播

随机推荐

  1. 【mysql】添加对emoji的支持
  2. 程序中处理一对多的数据
  3. 如何在sql server中生成并手动插入一个惟
  4. 使用 Servlet+jQuery+MySQL 实现简单的聊
  5. SQL 2005 Reporting Services:物理分页和
  6. sql查询每个学生的最高成绩mysql语句
  7. SQL server 2008 (R2) 无日志文附加数据
  8. Linux crontab定时任务的使用
  9. Linux的基本权限和特殊权限
  10. OS + Linux RHEL / RedHat Enterprise 5