1:先启动geth节点
geth --identity "xiaohong" --rpc --rpccorsdomain "*" --rpcaddr "192.168.1.105" --datadir "./" --port "30303" --nodiscover --rpcapi "personal,db,eth,net,web3,miner" --networkid 1999 console 2>>geth.log
关键点在--rpcaddr 这个属性,这个如果没有设置的话 默认就是localhost 设置了就是通过该ip来访问
可以通过geth attach http://localhost:8545来测试没有设置的
通过geth attach http://rpcaddr:8545 rpcaddr就是命令中设置的值来访问
在安卓上localhost的时候不能写http://localhost:8545 要写http://10.0.2.2:8545;
2:在app下面的build.grade里面的dependencies里添加
implementation 'org.web3j:core:3.3.1-android'
接入web3j
3:调用web3j
package com.example.ppc.testgoeehereumapp;
import android.accounts.Account;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import org.json.JSONException;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.Web3jFactory;
import org.web3j.protocol.admin.Admin;
import org.web3j.protocol.admin.AdminFactory;
import org.web3j.protocol.core.methods.response.NetVersion;
import org.web3j.protocol.core.methods.response.Web3ClientVersion;
import org.web3j.protocol.core.methods.response.Web3Sha3;
import org.web3j.protocol.http.HttpService;
import java.io.IOException;
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;
private Button account_button;
private TextView account_textview;
private Button new_account_button;
public static final int SHOW = 0;
String rpc_url = "http://192.168.1.105:8545";
Web3j web3;
Admin admin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textview=(TextView)findViewById(R.id.textview123);
showButton = (Button) findViewById(R.id.showView);
showButton.setOnClickListener(this);
account_textview=(TextView)findViewById(R.id.textview_accounts);
account_button = (Button) findViewById(R.id.account_button);
account_button.setOnClickListener(this);
new_account_button = (Button) findViewById(R.id.new_account_button);
new_account_button.setOnClickListener(this);
initWeb3j();
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.showView) {
getVersion();
}else if (v.getId()==R.id.account_button){
getAccounts();
}else if (v.getId()==R.id.new_account_button){
new_Accounts();
}
}
private void getVersion() {
VersionTask versionTask = new VersionTask();
versionTask.execute();
}
private void getAccounts() {
AccountsTask versionTask = new AccountsTask();
versionTask.execute();
}
private void new_Accounts() {
NewAccountsTask versionTask = new NewAccountsTask();
versionTask.execute();
}
private class VersionTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
String result ;
try{
String version = web3.web3ClientVersion().send().getResult();
result = version;
}catch (IOException e){
e.printStackTrace();
result = "获取版本号出错啦" + e.getMessage();
}
return result;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
textview.setText(result);
Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();
}
}
private class NewAccountsTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
String result ;
try{
String version = admin.personalNewAccount("xiaohong").send().getResult();
result = version;
}catch (IOException e){
e.printStackTrace();
result = "获取版本号出错啦" + e.getMessage();
}
return result;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// textview.setText(result);
Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();
}
}
private class AccountsTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
String result ;
try{
String account_string = "";
List<String> accounts = web3.ethAccounts().send().getAccounts();
account_string += accounts.size();
for (String account:accounts){
account_string += " \n " + account ;
}
result = account_string;
}catch (IOException e){
e.printStackTrace();
result = "获取账号出错啦" + e.getMessage();
}
Log.e("xiaohong",result);
return result;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
account_textview.setText(result);
Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();
}
}
private class InitWeb3JTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
String url = params[0];
String result = "Success initializing web3j/rpc";
try {
HttpService httpService = new HttpService(url);
web3 = Web3jFactory.build(httpService); // defaults to http://localhost:8545/
admin = AdminFactory.build(httpService);
} catch (Exception wtf) {
String exception = wtf.toString();
Log.d("wat", "Error initializing web3j/infura. Error: " + exception);
}
return result;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();
}
}
private void initWeb3j() {
InitWeb3JTask task = new InitWeb3JTask();
task.execute(rpc_url);
}
}
4:在AndroidManifest.xml中加入
<uses-permission android:name="android.permission.INTERNET"/>
项目源码可在https://download.csdn.net/download/wahaha13168/10544522中下载
版权声明:本文为wahaha13168原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。