Witam. Piszę małą aplikacje na androida której zadaniem jest wysyłanie pewnych informacji na serwer. Niestety aplikacja nie chce się połączyć poprawnie. Serwer testowałem z wykorzystaniem zwykłych javo'wych aplikacji jednak gdy przeniosłem jej ciało (klienta) do androida jemu się to nie spodobało.
package com.example.spr;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import com.google.android.gms.wallet.LoyaltyWalletObject;
import android.app.Activity;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class RejestracjaActivity extends Activity {
Uzytkownik user = new Uzytkownik(null, null, null, false, null, null, null, 0);
ProgressBar pb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rejestracja);
pb=(ProgressBar) findViewById(R.id.progressBar1);
pb.setVisibility(ProgressBar.INVISIBLE);
}
private boolean czyPusty(EditText edit) {
if(edit.equals(null))
return false;
else
return true;
}
public void rejestrujListener(View view) {
final EditText ImieText = (EditText) findViewById(R.id.Imie);
String Imie = ImieText.getText().toString();
final EditText NazwiskoText = (EditText) findViewById(R.id.Nazwisko);
String Nazwisko = NazwiskoText.getText().toString();
final EditText MiastoText = (EditText) findViewById(R.id.Miasto);
String Miasto = MiastoText.getText().toString();
final EditText LoginText = (EditText) findViewById(R.id.Login);
String Login = LoginText.getText().toString();
final EditText HasloText = (EditText) findViewById(R.id.Haslo);
String Haslo = HasloText.getText().toString();
final EditText Haslo2Text = (EditText) findViewById(R.id.Haslo2);
String Haslo2 = Haslo2Text.getText().toString();
final CheckBox checkBox = (CheckBox) findViewById(R.id.Typ);
final TextView errorText = (TextView) findViewById(R.id.textError);
final TextView iTex = (TextView) findViewById(R.id.TextImie);
final TextView nTex = (TextView) findViewById(R.id.TextNazwisko);
final TextView mTex = (TextView) findViewById(R.id.TextMiasto);
final TextView lTex = (TextView) findViewById(R.id.TextLogin);
final TextView hTex = (TextView) findViewById(R.id.TextHaslo);
final TextView h2Tex = (TextView) findViewById(R.id.TextHaslo2);
String temp;
if(czyPusty(ImieText))
{
errorText.setTextColor(Color.RED);
errorText.setText("Sprawdz pola zaznaczone gwiazdką *");
temp = iTex.getText().toString();
temp += "*";
iTex.setText(temp);
}
else{
iTex.setText("Imie:");
user.imie=Imie;
}
if(czyPusty(NazwiskoText))
{
errorText.setTextColor(Color.RED);
errorText.setText("Sprawdz pola zaznaczone gwiazdką *");
temp = nTex.getText().toString();
temp += "*";
nTex.setText(temp);
}
else{
nTex.setText("Nazwisko:");
user.nazwisko=Nazwisko;
}
if(czyPusty(MiastoText)){
errorText.setTextColor(Color.RED);
errorText.setText("Sprawdz pola zaznaczone gwiazdką *");
temp = mTex.getText().toString();
temp += "*";
mTex.setText(temp);
}
else{
mTex.setText("Miasto:");
user.miasto=Miasto;
}
if (checkBox.isChecked()){
user.typ_konta=true;}
else{
user.typ_konta=false;}
if (czyPusty(LoginText)){
errorText.setTextColor(Color.RED);
errorText.setText("Sprawdz pola zaznaczone gwiazdką *");
temp = lTex.getText().toString();
temp += "*";
lTex.setText(temp);
}
else{
lTex.setText("Login:");
user.login=Login;
}
if(czyPusty(HasloText)){
temp = hTex.getText().toString();
temp += "*";
hTex.setText(temp);
}
else{
hTex.setText("Haslo:");
}
if(czyPusty(Haslo2Text)){
temp = h2Tex.getText().toString();
temp += "*";
h2Tex.setText(temp);
}
else{
h2Tex.setText("Powtórz hasło:");
}
if((czyPusty(HasloText))&&(czyPusty(Haslo2Text))){
if ((!Haslo.equals(Haslo2)))
{
errorText.setTextColor(Color.RED);
errorText.setText("Sprawdz pola zaznaczone gwiazdką *");
temp = hTex.getText().toString();
temp += "*";
hTex.setText(temp);
temp = h2Tex.getText().toString();
temp += "*";
h2Tex.setText(temp);
}
else
{
user.haslo=Haslo;
h2Tex.setText("Powtórz hasło:");
hTex.setText("Haslo:");
}
}
user.ostrzezenia=0;
user.lokalizacja="0,0";
if((czyPusty(ImieText))&&(czyPusty(NazwiskoText))&&(czyPusty(MiastoText))&&(checkBox.isChecked())&&(czyPusty(LoginText))&&(czyPusty(HasloText))&&(czyPusty(Haslo2Text))&&(Haslo.equals(Haslo2)))
{
errorText.setText(null);
new watekRejestracji().execute();
}
}
private class watekRejestracji extends AsyncTask<Void, Void, Void>{
private static final int PORT = 9512;
private static final String HOST = "95.49.168.205";
ObjectOutputStream out = null;
@Override
protected void onPreExecute(){
pb.setVisibility(ProgressBar.VISIBLE);
}
@Override
protected Void doInBackground(Void... params) {
try
{
Socket socket = new Socket(HOST, PORT);
//System.out.println("Polaczono");
OutputStream outStream = socket.getOutputStream();
out = new ObjectOutputStream(outStream);
//System.out.println("utworzono strumienie");
Uzytkownik user = new Uzytkownik("Jan","Nowak","Siedlce",true,"JaNo","123","Wyszka",0);
MsgPack msg = new MsgPack(true, 1, 2, true, "krwotok", true, user);
//System.out.println("wysyla");
out.writeObject(msg);
//System.out.println("wyslano");
//System.out.println("zamykam");
out.close();
socket.close();
}
catch(Exception e)
{
Toast.makeText(getApplicationContext(),
"Coś sie zjebalo", Toast.LENGTH_SHORT)
.show();
}
return null;
}
@Override
protected void onPostExecute(Void result){
pb.setVisibility(ProgressBar.INVISIBLE);
}
}
}
Ta aktywność ma odpowiadać za wysłanie danych o rejestracji użytkownika na serwer. Wiem, że walidacja (o ile można to już tak nazwać) jest jeszcze szczątkowa ale to później. Obiekt na razie jak widać tworze na sztywno. Później będę go przekazywał.
Kod błędu:
11-19 13:15:17.189: D/dalvikvm(30256): GC_EXTERNAL_ALLOC freed 75K, 49% free 2770K/5379K, external 0K/0K, paused 68ms
11-19 13:15:28.179: D/dalvikvm(30256): GC_CONCURRENT freed 225K, 50% free 2871K/5639K, external 142K/512K, paused 10ms+4ms
11-19 13:15:52.639: W/dalvikvm(30256): threadid=10: thread exiting with uncaught exception (group=0x40018560)
11-19 13:15:52.659: E/AndroidRuntime(30256): FATAL EXCEPTION: AsyncTask #1
11-19 13:15:52.659: E/AndroidRuntime(30256): java.lang.RuntimeException: An error occured while executing doInBackground()
11-19 13:15:52.659: E/AndroidRuntime(30256): at android.os.AsyncTask$3.done(AsyncTask.java:200)
11-19 13:15:52.659: E/AndroidRuntime(30256): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
11-19 13:15:52.659: E/AndroidRuntime(30256): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
11-19 13:15:52.659: E/AndroidRuntime(30256): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
11-19 13:15:52.659: E/AndroidRuntime(30256): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
11-19 13:15:52.659: E/AndroidRuntime(30256): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
11-19 13:15:52.659: E/AndroidRuntime(30256): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
11-19 13:15:52.659: E/AndroidRuntime(30256): at java.lang.Thread.run(Thread.java:1019)
11-19 13:15:52.659: E/AndroidRuntime(30256): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
11-19 13:15:52.659: E/AndroidRuntime(30256): at android.os.Handler.<init>(Handler.java:121)
11-19 13:15:52.659: E/AndroidRuntime(30256): at android.widget.Toast.<init>(Toast.java:68)
11-19 13:15:52.659: E/AndroidRuntime(30256): at android.widget.Toast.makeText(Toast.java:231)
11-19 13:15:52.659: E/AndroidRuntime(30256): at com.example.spr.RejestracjaActivity$watekRejestracji.doInBackground(RejestracjaActivity.java:203)
11-19 13:15:52.659: E/AndroidRuntime(30256): at com.example.spr.RejestracjaActivity$watekRejestracji.doInBackground(RejestracjaActivity.java:1)
11-19 13:15:52.659: E/AndroidRuntime(30256): at android.os.AsyncTask$2.call(AsyncTask.java:185)
11-19 13:15:52.659: E/AndroidRuntime(30256): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
11-19 13:15:52.659: E/AndroidRuntime(30256): ... 4 more
niezdecydowany