R
rotaugenbaumfrosch
Neues Mitglied
- 0
Hallo zusammen!
Mein Problem ist, ich habe eine App die eine Socketverbindung von einem Android Gerät (Motorola Xoom, Android 3.2) zu einem PC aufbauen soll.
Es soll der Text aus einer XML-Datei eingelesen und über die Verbindung verschickt werden.
Wenn ich meinen Quellcode mit einem Android 4.0 Emulator in Eclipse laufen lasse funktioniert alles einwandfrei,
mit Android 3.2 leider nicht. Mit Android 3.2 ist es mit nicht möglich Daten zu senden oder zu empfangen und ich verstehe nicht wieso.
Ich hoffe jemand kann mir ein paar Tipps geben woran es liegen könnte.
Vielen Dank in voraus
Anbei mein Quellcode
Mein Problem ist, ich habe eine App die eine Socketverbindung von einem Android Gerät (Motorola Xoom, Android 3.2) zu einem PC aufbauen soll.
Es soll der Text aus einer XML-Datei eingelesen und über die Verbindung verschickt werden.
Wenn ich meinen Quellcode mit einem Android 4.0 Emulator in Eclipse laufen lasse funktioniert alles einwandfrei,
mit Android 3.2 leider nicht. Mit Android 3.2 ist es mit nicht möglich Daten zu senden oder zu empfangen und ich verstehe nicht wieso.
Ich hoffe jemand kann mir ein paar Tipps geben woran es liegen könnte.
Vielen Dank in voraus
Anbei mein Quellcode
Code:
package a.b.c;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import org.xmlpull.v1.XmlSerializer;
//import Packet.XML.Datei.R;
import android.R.layout;
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.util.Xml;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class TesttestActivity extends Activity
{
/** Called when the activity is first created. */
Button btnStart, btnSend, btnEnde;
TextView textStatus;
NetworkTask networktask;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnStart = (Button)findViewById(R.id.btnStart); //Nachricht-Senden Button initialisieren
btnEnde = (Button)findViewById(R.id.btnEnde); //Nachricht-Senden Button initialisieren
btnSend = (Button)findViewById(R.id.btnSend); //Nachricht-Senden Button initialisieren
textStatus = (TextView)findViewById(R.id.textStatus); //Textfeld initialisieren
btnStart.setOnClickListener(btnStartListener); //OnClick Listener für den Start Button zuweisen
btnSend.setOnClickListener(btnSendListener); //OnClick Listener für den Senden Button zuweisen
btnEnde.setOnClickListener(btnEndeListener); //OnClick Listener für den Ende Button zuweisen
networktask = new NetworkTask(); //Create initial instance so SendDataToNetwork doesn't throw an error.
}
//--------------------------OnClickListener . Aufgerufen beim Drücken des Ende Buttons------------------------------------------------
private OnClickListener btnEndeListener = new OnClickListener()
{
public void onClick(View v)
{
networktask.beenden();
btnStart.setVisibility(View.INVISIBLE);
}
};
//--------------------------OnClickListener . Aufgerufen beim Drücken des START Buttons------------------------------------------------
private OnClickListener btnStartListener = new OnClickListener()
{
public void onClick(View v)
{
btnStart.setVisibility(View.INVISIBLE);
networktask = new NetworkTask(); //New instance of NetworkTask
networktask.execute();
}
};
//-----------------------OnClickListener . Aufgerufen beim Drücken des Nachrichtenbuttons------------------------------------------------
private OnClickListener btnSendListener = new OnClickListener()
{
public void onClick(View v)
{
String test = "";
try{
File f = new File(Environment.getExternalStorageDirectory()+"/txt.xml");
FileInputStream fileIS = new FileInputStream(f);
BufferedReader buf = new BufferedReader(new InputStreamReader(fileIS));
String readString = new String();
//just reading each line and pass it on the debugger
while((readString = buf.readLine())!= null)
{
Log.d("line: ", readString);
test = test + readString;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
textStatus.setText("Sending Message to AsyncTask.");
//networktask.SendDataToNetwork("GET / HTTP/1.1\r\n\r\n");
networktask.SendDataToNetwork(test);
}
};
//----------------------Socketverbindung aufbauen ----------------------------------------------------------------------------------
public class NetworkTask extends AsyncTask<Void, byte[], Boolean>
{
Socket nsocket; //Network Socket
InputStream nis; //Network Input Stream
OutputStream nos; //Network Output Stream
@Override // **
protected void onPreExecute() // **
{ // Unterklasse von AsyncTast
Log.i("AsyncTask", "onPreExecute"); //
} // **
@Override
protected Boolean doInBackground(Void... params) //Unterklasse von AsynkTask
{ // - Klasse in der die Socket Verbindung ausgeführt wird -
boolean result = false;
try
{
Log.i("AsyncTask", "doInBackground: Creating socket"); //Logeinträge zur Dokumentation
SocketAddress sockaddr = new InetSocketAddress("192.168.247.37", 4711); // Socketverbindung aufbauen
nsocket = new Socket();
nsocket.connect(sockaddr, 5000); //10 second connection timeout
if (nsocket.isConnected())
{
nis = nsocket.getInputStream();
nos = nsocket.getOutputStream();
Log.i("AsyncTask", "doInBackgr ound: Waiting for inital data...");
//------------------Daten werden eingelesen-----------------------------------------------------------------------------------------------------------
byte[] buffer = new byte[4096];
int read = nis.read(buffer, 0, 4096); //This is blocking
while(read != -1)
{
byte[] tempdata = new byte[read];
System.arraycopy(buffer, 0, tempdata, 0, read);
publishProgress(tempdata);
Log.i("AsyncTask", "doInBackground: Got some data");
read = nis.read(buffer, 0, 4096); //This is blocking
}
}
}
catch (IOException e)
{
e.printStackTrace();
Log.i("AsyncTask", "doInBackground: IOException");
result = true;
}
catch (Exception e)
{
e.printStackTrace();
Log.i("AsyncTask", "doInBackground: Exception");
result = true;
}
finally
{
try
{
nis.close();
nos.close();
nsocket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
Log.i("AsyncTask", "doInBackground: Finished");
}
return result;
}
// -------------------------------------Datei senden------------------------------------------------------------------------------
public void SendDataToNetwork(String cmd)
{ //You run this from the main thread.
//cmd ="sss";
try
{
if (nsocket.isConnected())
{
Log.i("AsyncTask", "SendDataToNetwork: Writing received message to socket");
nos.write(cmd.getBytes());
}
else
{
Log.i("AsyncTask", "SendDataToNetwork: Cannot send message. Socket is closed");
}
}
catch (Exception e)
{
Log.i("AsyncTask", "SendDataToNetwork: Message send failed. Caught an exception");
String ErrorMessage = e.getMessage();
}
}
//----------------------------------Unterklasse von asynkTask----------------------------------------------------------------------
@Override
protected void onProgressUpdate(byte[]... values)
{
if (values.length > 0)
{
Log.i("AsyncTask", "onProgressUpdate: " + values[0].length + " bytes received.");
textStatus.setText(new String(values[0]));
}
}
//----------------------------------Bei Abruch der Verbindung Button wieder sichtbar machen--------------------------------------
@Override
protected void onCancelled()
{
Log.i("AsyncTask", "Cancelled.");
btnStart.setVisibility(View.VISIBLE);
}
//----------------------------------Socket VErbindung beenden--------------------------------------
public void beenden()
{
try
{
nsocket.close();
}
catch (IOException e)
{
e.printStackTrace();
Log.i("AsyncTask", "Socket Verbindung beenden gescheitert");
}
btnStart.setVisibility(View.VISIBLE);
}
//-------------------------------Fehlermeldung------------------------------------------------------------------------------------
@Override
protected void onPostExecute(Boolean result)
{
if (result)
{
Log.i("AsyncTask", "onPostExecute: Completed with an Error.");
textStatus.setText("There was a connection error.");
}
else
{
Log.i("AsyncTask", "onPostExecute: Completed.");
}
btnStart.setVisibility(View.VISIBLE);
}
}
//-------------------------------Fehlermeldung------------------------------------------------------------------------------------
@Override
protected void onDestroy()
{
super.onDestroy();
networktask.cancel(true); //In case the task is currently running
}
}