Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t将Android应用程序连接到Raspberry Pi以控制GPIO_Java_Android_Raspberry Pi3 - Fatal编程技术网

Java Can';t将Android应用程序连接到Raspberry Pi以控制GPIO

Java Can';t将Android应用程序连接到Raspberry Pi以控制GPIO,java,android,raspberry-pi3,Java,Android,Raspberry Pi3,我正在尝试创建一个Android应用程序来控制Raspberry PI GPIO。两者都连接到同一网络。我尝试了静态IP和端口80转发的动态IP。仍然没有成功。 下面是我正在使用的代码(): public类主活动{ @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 开关swi=(开关)findviewbyd(

我正在尝试创建一个Android应用程序来控制Raspberry PI GPIO。两者都连接到同一网络。我尝试了静态IP和端口80转发的动态IP。仍然没有成功。 下面是我正在使用的代码():

public类主活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
开关swi=(开关)findviewbyd(R.id.takE);
setOnCheckedChangeListener(新的CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
如果(已检查){
新背景_get().execute(“led1=1”);
}否则{
新背景_get().execute(“led1=0”);
}
}
});
}
私有类后台\u获取扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
URL=新URL(“http://192.168.XXX.XXX/?“+params[0]);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
BufferedReader in=新的BufferedReader(新的InputStreamReader(connection.getInputStream());
StringBuilder结果=新建StringBuilder();
字符串输入线;
而((inputLine=in.readLine())!=null)
result.append(inputLine.append(“\n”);
in.close();
连接断开();
返回result.toString();
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
}

}我不会使用http,而是使用套接字进行通信

因此,您应该在Raspberry PI上创建一个服务器套接字,在android上创建一个套接字。 您只需遵循oracle套接字示例:

为了控制GPIO,我建议使用 我自己也在使用这个图书馆,我对它非常满意


如果你想拥有多个客户端,你应该使用
Socket-clientSocket=serverSocket.accept()并为每个客户端启动一个新线程。

打开
http://192.168.XXX.XXX/?led1=1
在手机或同一网络上的计算机的浏览器中?如果它也不工作,那就意味着网络配置或raspberry pi出现问题。你的代码看起来不错。你有什么例外?您的手机浏览器可以访问该页面吗?您的电脑浏览器可以访问它吗?不,我无法在任何浏览器(手机和pc)上访问该页面。可能有什么问题?这并不能回答问题。
public class Main extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    Switch swi = (Switch)findViewById(R.id.takE);
    swi.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked){
                new Background_get().execute("led1=1");
            }else{
                new Background_get().execute("led1=0");
            }
        }
    });

}
private class Background_get extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... params){
        try {
            URL url = new URL("http://192.168.XXX.XXX/?" + params[0]);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            StringBuilder result = new StringBuilder();
            String inputLine;
            while ((inputLine = in.readLine()) != null)
                result.append(inputLine).append("\n");

            in.close();
            connection.disconnect();
            return result.toString();
        }catch (IOException e){
            e.printStackTrace();
        }
        return null;
    }
}