package com.liyinan.mobileblockchain;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
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 = findViewById(R.id.textview);
        showButton =  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.21.23.135:8545";   //注意,不是127.0.0.1
                    //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("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();
    }
}运行上述代码是出现异常 :
W/System.err: org.alexd.jsonrpc.JSONRPCException: Cannot convert result to String
                  at org.alexd.jsonrpc.JSONRPCClient.callString(JSONRPCClient.java:226)
                  at com.liyinan.mobileblockchain.MainActivity$2.run(MainActivity.java:69)
                  at java.lang.Thread.run(Thread.java:841)
              Caused by: org.alexd.jsonrpc.JSONRPCException: IO error
                  at org.alexd.jsonrpc.JSONRPCHttpClient.doJSONRequest(JSONRPCHttpClient.java:133)
                  at org.alexd.jsonrpc.JSONRPCClient.doRequest(JSONRPCClient.java:94)
                  at org.alexd.jsonrpc.JSONRPCClient.callString(JSONRPCClient.java:223)
               ... 2 more
              Caused by: org.apache.http.conn.HttpHostConnectException: Connection to http://10.21.23.135:8545 refused
                  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183)
                  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
                  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
                  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
                  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
                  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
                  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
                  at org.alexd.jsonrpc.JSONRPCHttpClient.doJSONRequest(JSONRPCHttpClient.java:100)
               ... 4 more
              Caused by: java.net.ConnectException: failed to connect to /10.21.23.135 (port 8545): connect failed: ECONNREFUSED (Connection refused)
                  at libcore.io.IoBridge.connect(IoBridge.java:114)
                  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
                  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
                  at java.net.Socket.connect(Socket.java:843)
                  at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
                  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
               ... 11 more
              Caused by: libcore.io.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
                  at libcore.io.Posix.connect(Native Method)
                  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
                  at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
                  at libcore.io.IoBridge.connect(IoBridge.java:112)
               ... 16 more哪位大神能帮看下

解决方案 »

  1.   

    String st =  client.callString("web3_clientVersion", map); 报错信息显示你这里不能强转为string
      

  2.   

    String st =  client.callString("web3_clientVersion", map); 
    callString 为一个封装方法 内部的jSON解析出错 ,可能根本为null 用String接受就会报错,要看callString的具体实现,建议用Object接受比较稳妥。还有既然connect failed: ECONNREFUSED (Connection refused) 连接被拒绝了,你至少先判断一下返回码再接受数据吧?