使用 Infura 运行 Java Android 中的一个 IPFS 节点
Use Infura to run a IPFS node in Java Android
我正在尝试从 Java Android 应用程序连接到 Infura 节点。
我正在按照这些文档连接到 infura 节点。
https://kauri.io/managing-storage-in-a-java-application-with-ipfs/3e8494f4f56f48c4bb77f1f925c6d926/a
https://github.com/ipfs-shipyard/java-ipfs-http-client/issues/115
代码:
package com.example.javahttp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import io.ipfs.api.IPFS;
public class MainActivity extends AppCompatActivity {
IPFS ipfs ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new MyTask().execute();
}
private class MyTask extends AsyncTask<Void , Void, Void > {
@Override
protected Void doInBackground(Void... voids) {
IPFS ipfs = new IPFS("/dnsaddr/ipfs.infura.io/tcp/5001/https");
try{
System.out.println("connected");
System.out.println("id: "+ ipfs.id());
}catch(Exception e){
System.out.println("not connected"+e);
}
return null;
}
}
}
我收到这个错误。
java.lang.RuntimeException: IOException contacting IPFS daemon.
Trailer: null ipfs method not allowed
请提出任何建议。
我不明白为什么会出现这样的错误,但是当我使用普通 java class 连接它时。有可能,您可以在此处参考我的存储库 blockchain with java 以查看您是否拥有所有相关依赖项并且您一直在正确地执行它,因为我不熟悉 android 但我熟悉 web3j。
您可以使用以下代码连接 infura 节点并向其解析文件。
import io.ipfs.api.IPFS;
import io.ipfs.api.MerkleNode;
import io.ipfs.api.NamedStreamable;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class App {
public static void main(String[] args) throws IOException {
IPFS ipfs = new IPFS("/dnsaddr/ipfs.infura.io/tcp/5001/https");
try {
NamedStreamable.InputStreamWrapper is = new NamedStreamable.InputStreamWrapper(new FileInputStream());
MerkleNode response = ipfs.add(is).get(0);
} catch (IOException ex) {
throw new RuntimeException("Error whilst communicating with the IPFS node", ex);
}
}
}
以防现在有人遇到这个问题,解决这个问题的方法很简单,就是升级到最新版本。
我从 v1.2.3 升级到 v1.3.3,问题消失了。
对于 maven,pom.xml
:
<dependency>
<groupId>com.github.ipfs</groupId>
<artifactId>java-ipfs-http-client</artifactId>
<version>v1.3.3</version>
</dependency>
我正在尝试从 Java Android 应用程序连接到 Infura 节点。 我正在按照这些文档连接到 infura 节点。
https://kauri.io/managing-storage-in-a-java-application-with-ipfs/3e8494f4f56f48c4bb77f1f925c6d926/a
https://github.com/ipfs-shipyard/java-ipfs-http-client/issues/115
代码:
package com.example.javahttp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import io.ipfs.api.IPFS;
public class MainActivity extends AppCompatActivity {
IPFS ipfs ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new MyTask().execute();
}
private class MyTask extends AsyncTask<Void , Void, Void > {
@Override
protected Void doInBackground(Void... voids) {
IPFS ipfs = new IPFS("/dnsaddr/ipfs.infura.io/tcp/5001/https");
try{
System.out.println("connected");
System.out.println("id: "+ ipfs.id());
}catch(Exception e){
System.out.println("not connected"+e);
}
return null;
}
}
}
我收到这个错误。
java.lang.RuntimeException: IOException contacting IPFS daemon.
Trailer: null ipfs method not allowed
请提出任何建议。
我不明白为什么会出现这样的错误,但是当我使用普通 java class 连接它时。有可能,您可以在此处参考我的存储库 blockchain with java 以查看您是否拥有所有相关依赖项并且您一直在正确地执行它,因为我不熟悉 android 但我熟悉 web3j。
您可以使用以下代码连接 infura 节点并向其解析文件。
import io.ipfs.api.IPFS;
import io.ipfs.api.MerkleNode;
import io.ipfs.api.NamedStreamable;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class App {
public static void main(String[] args) throws IOException {
IPFS ipfs = new IPFS("/dnsaddr/ipfs.infura.io/tcp/5001/https");
try {
NamedStreamable.InputStreamWrapper is = new NamedStreamable.InputStreamWrapper(new FileInputStream());
MerkleNode response = ipfs.add(is).get(0);
} catch (IOException ex) {
throw new RuntimeException("Error whilst communicating with the IPFS node", ex);
}
}
}
以防现在有人遇到这个问题,解决这个问题的方法很简单,就是升级到最新版本。
我从 v1.2.3 升级到 v1.3.3,问题消失了。
对于 maven,pom.xml
:
<dependency>
<groupId>com.github.ipfs</groupId>
<artifactId>java-ipfs-http-client</artifactId>
<version>v1.3.3</version>
</dependency>