В настоящее время я пытаюсь отправить сообщение из моего приложения на мой внутренний сервер SQL.В настоящее время я получаю IOException с помощью оператора connection.getOutputStream ().Я использовал тот же код для службы хостинга, и все работает нормально.
Я уже сделал свой SQL-сервер доступным извне, используя DNS и переадресацию портов, но я все еще получаю IOException.Может быть, кто-то может мне помочь.Внутренний сервер - Raspberry Pi, настроенный с использованием Apache2.
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();
}
}