当我使用Internel服务器时,如何解决IOException问题。(Java/Android)
我当前正在尝试将消息从我的应用发送到我的内部SQL server。目前,我通过connection.getOutputStream()语句获得一个IOException。我使用了相同的代码为托管服务,一切都很好 我已经使用DNS和端口转发从外部访问了我的SQL server,但是我仍然得到一个IOException。也许有人能帮我。内部服务器是使用Apache2设置的Raspberry Pi当我使用Internel服务器时,如何解决IOException问题。(Java/Android),java,android,mysql,raspberry-pi,webserver,Java,Android,Mysql,Raspberry Pi,Webserver,我当前正在尝试将消息从我的应用发送到我的内部SQL server。目前,我通过connection.getOutputStream()语句获得一个IOException。我使用了相同的代码为托管服务,一切都很好 我已经使用DNS和端口转发从外部访问了我的SQL server,但是我仍然得到一个IOException。也许有人能帮我。内部服务器是使用Apache2设置的Raspberry Pi package com.example.myapplication; import android.ne
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();
}
}
您肯定没有添加以下内容:- 注意:
I0Exception
大多数情况下用于互联网连接。
请加上
在AndroidManifest.xml
我看不出出现I0Exception
的其他原因
另外,在
onDestory(…)
中停止线程。。否则你会得到另一个例外。(如果线程仍在运行)可能存在异常堆栈跟踪?在XML文件中设置了internet权限。奇怪的是,当我将变量scripturlstring设置为外部托管服务提供商(webhost.com)时,该程序也可以顺利运行。只有当我想使用我的专用服务器时,才会出现错误消息。我在服务器端使用PHP脚本来保存消息。脚本中的错误是否会导致IOException错误?
<uses-permission android:name="android.permission.INTERNET" />