gpt4 book ai didi

java - 当我使用内部服务器时,如何解决 IOException 问题。 (Java/安卓)

转载 作者:行者123 更新时间:2023-11-29 09:52:55 25 4
gpt4 key购买 nike

我当前正在尝试从我的应用程序向我的内部 SQL 服务器发送消息。目前,我通过connection.getOutputStream()语句得到了IOException。我已将相同的代码用于托管服务,一切正常。

我已经使用 DNS 和端口转发从外部访问我的 SQL 服务器,但我仍然收到 IOException。也许有人可以帮助我。内部服务器是使用 Apache2 设置的 Raspberry Pi。

package com.example.myapplication;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import static android.widget.Toast.*;



public class MainActivity extends AppCompatActivity {
EditText et;
Button btn;
TextView tv;

final String scripturlstring = "hostingservice.net";
//final String scripturlstring = "192.168.178.97:80/index.php"; // Ip adress raspberry pi
@Override

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

et = (EditText) findViewById(R.id.editText);
tv = (TextView) findViewById(R.id.textView);
btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(internetAvailable()){
sendToServer(et.getText().toString());
}else{
makeText(getApplicationContext(), "Internet ist nicht Verfügbar", LENGTH_SHORT).show();
}
}
});
}

public void sendToServer(final String text){
new Thread(new Runnable() {
@Override
public void run() {
try {

String textparam = "text1=" + URLEncoder.encode(text, "UTF-8");
tv.setText(textparam);
URL scripturl = new URL(scripturlstring);
HttpURLConnection connection = (HttpURLConnection) scripturl.openConnection();


connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setFixedLengthStreamingMode(textparam.getBytes().length);

// Problem entsteht beim connection.getOutputStream

OutputStreamWriter contentWriter;
contentWriter = new OutputStreamWriter(connection.getOutputStream());
contentWriter.write(textparam);
contentWriter.flush();
contentWriter.close();


InputStream answerInputStream = connection.getInputStream();
final String answer = getTextFromInputStream(answerInputStream);


runOnUiThread(new Runnable() {
@Override
public void run() {
//Toast.makeText(getApplicationContext(), "noThread", Toast.LENGTH_SHORT).show();

tv.setText(answer);

}
});
answerInputStream.close();
connection.disconnect();
connection.close();
}catch (MalformedURLException e){
e.printStackTrace();
tv.setText("Pi hat probleme mit dem MalformedUrlException");
}catch(IOException e){
tv.setText("Pi hat probleme mit dem IOexception");
//System.err.println("Error creating HTTP connection");
e.printStackTrace();
}

}
}).start();
}
public String getTextFromInputStream (InputStream is){
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder stringBuilder = new StringBuilder();
try {
String aktuellZeile;
while((aktuellZeile = reader.readLine()) != null){
stringBuilder.append(aktuellZeile);
stringBuilder.append("\n");
}
}catch (IOException e){
e.printStackTrace();
}

return stringBuilder.toString().trim();
}
public boolean internetAvailable(){
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnected();

}
}

最佳答案

你肯定还没有添加这个:-

P.S :- Most of the timeI0Exception is for internet connectivity. Please do add

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

AndroidManifest.xml

我认为 I0Exception 没有其他原因。

另外,在onDestory(...)停止线程..否则你会得到另一个异常。 (如果线程仍在运行)

关于java - 当我使用内部服务器时,如何解决 IOException 问题。 (Java/安卓),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54480140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com