Android: połączenie internetowe w tle nie chce się łączyć

Android: połączenie internetowe w tle nie chce się łączyć
UF
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:23
0

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.

Kopiuj
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:

Kopiuj
 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
niezdecydowany
To pan miał przyjemność pisać ten system dla PKW ?
panryz
  • Rejestracja:około 17 lat
  • Ostatnio:7 minut
0

Wywal Toast z try catch w AsyncTask

UF
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:23
0

Trochę edytowałem ten kod:

Kopiuj
 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.util.Log;
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);
	}


	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;
		boolean isOK = true;
		
		
		
		if(Imie.length()<=0)
		{
			errorText.setTextColor(Color.RED);
			errorText.setText("Sprawdz pola zaznaczone gwiazdką *");
			temp = iTex.getText().toString();
			temp += "*";
			iTex.setText(temp);
			isOK = false ;
		}
		else{
			iTex.setText("Imie:");
			user.imie=Imie;
		}
		
		if(Nazwisko.length()<=0)
		{
			errorText.setTextColor(Color.RED);
			errorText.setText("Sprawdz pola zaznaczone gwiazdką *");
			temp = nTex.getText().toString();
			temp += "*";
			nTex.setText(temp);
			isOK = false ;
		}
		else{ 
			nTex.setText("Nazwisko:");
			user.nazwisko=Nazwisko;
		}
		if(Miasto.length()<=0){
			errorText.setTextColor(Color.RED);
			errorText.setText("Sprawdz pola zaznaczone gwiazdką *");
			temp = mTex.getText().toString();
			temp += "*";
			isOK = false ;
			mTex.setText(temp);
		}
		else{
			mTex.setText("Miasto:");
			user.miasto=Miasto;
		}
		if (checkBox.isChecked()){
            user.typ_konta=true;}
		else{
			user.typ_konta=false;}
		if (Login.length()<=0){
			errorText.setTextColor(Color.RED);
			errorText.setText("Sprawdz pola zaznaczone gwiazdką *");
			temp = lTex.getText().toString();
			temp += "*";
			lTex.setText(temp);
			isOK = false ;
		}
		else{
			lTex.setText("Login:");
			user.login=Login;
		}
		if(Haslo.length()<=0){
			temp = hTex.getText().toString();
			temp += "*";
			hTex.setText(temp);
			isOK = false ;
		}
		else{
			hTex.setText("Haslo:");
		}
		if(Haslo2.length()<=0){
			temp = h2Tex.getText().toString();
			temp += "*";
			h2Tex.setText(temp);
			isOK = false ;
		}
		else{
			h2Tex.setText("Powtórz hasło:");
		}
		/*if((Haslo.length()<=0)&&(Haslo2.length()<=0)){
			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(isOK)
		{
			errorText.setTextColor(Color.BLACK);
			errorText.setText("Dane poprawne");
			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)  
			        {  
			        	System.out.println("Pojebało");
			        }
					return null;  
		}

		@Override
		protected void onPostExecute(Void result){
			pb.setVisibility(ProgressBar.INVISIBLE);
		}

	
		
		
		
	}
}

Log jednak nadal pokazuje błąd (pojebalo)

Kopiuj
11-19 21:06:13.529: D/dalvikvm(3657): GC_EXTERNAL_ALLOC freed 71K, 49% free 2769K/5379K, external 0K/0K, paused 119ms
11-19 21:06:19.139: I/System.out(3657): Pojeba這
11-19 21:06:26.489: D/dalvikvm(3657): GC_CONCURRENT freed 175K, 49% free 2918K/5639K, external 142K/512K, paused 9ms+20ms
11-19 21:07:18.869: W/KeyCharacterMap(3657): No keyboard for id 0
11-19 21:07:18.879: W/KeyCharacterMap(3657): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
11-19 21:07:28.739: D/dalvikvm(3657): GC_CONCURRENT freed 405K, 51% free 2943K/5895K, external 142K/512K, paused 3ms+6ms
11-19 21:09:40.169: W/KeyCharacterMap(3657): No keyboard for id 0
11-19 21:09:40.169: W/KeyCharacterMap(3657): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
11-19 21:09:47.499: I/dalvikvm(3657): Jit: resizing JitTable from 512 to 1024
11-19 21:10:47.319: W/KeyCharacterMap(3657): Can't open keycharmap file
11-19 21:10:47.329: W/KeyCharacterMap(3657): Error loading keycharmap file '/system/usr/keychars/sec_touchscreen.kcm.bin'. hw.keyboards.65537.devname='sec_touchscreen'
11-19 21:10:47.329: W/KeyCharacterMap(3657): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
11-19 21:10:47.579: W/IInputConnectionWrapper(3657): showStatusIcon on inactive InputConnection
11-19 21:10:49.139: D/dalvikvm(3657): Debugger has detached; object registry had 1 entries
11-19 21:12:54.249: D/dalvikvm(3954): GC_EXTERNAL_ALLOC freed 72K, 49% free 2769K/5379K, external 0K/0K, paused 57ms
11-19 21:13:17.899: I/System.out(3954): Pojeba這
11-19 21:13:24.619: D/dalvikvm(3954): GC_CONCURRENT freed 176K, 49% free 2923K/5639K, external 142K/512K, paused 9ms+19ms
11-19 21:15:34.259: W/KeyCharacterMap(3954): Can't open keycharmap file
11-19 21:15:34.259: W/KeyCharacterMap(3954): Error loading keycharmap file '/system/usr/keychars/sec_touchscreen.kcm.bin'. hw.keyboards.65537.devname='sec_touchscreen'
11-19 21:15:34.259: W/KeyCharacterMap(3954): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
11-19 21:15:34.349: W/IInputConnectionWrapper(3954): showStatusIcon on inactive InputConnection
11-19 21:17:43.389: D/dalvikvm(4131): GC_EXTERNAL_ALLOC freed 79K, 49% free 2769K/5379K, external 0K/0K, paused 264ms
11-19 21:17:44.299: W/IInputConnectionWrapper(4131): showStatusIcon on inactive InputConnection
11-19 21:17:52.979: D/dalvikvm(4131): GC_CONCURRENT freed 181K, 49% free 2916K/5639K, external 142K/512K, paused 7ms+38ms
11-19 21:18:01.909: I/System.out(4131): Pojeba這
11-19 21:20:16.299: W/KeyCharacterMap(4131): Can't open keycharmap file
11-19 21:20:16.299: W/KeyCharacterMap(4131): Error loading keycharmap file '/system/usr/keychars/sec_touchscreen.kcm.bin'. hw.keyboards.65537.devname='sec_touchscreen'
11-19 21:20:16.299: W/KeyCharacterMap(4131): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
11-19 21:20:17.839: W/IInputConnectionWrapper(4131): showStatusIcon on inactive InputConnection
11-19 21:20:48.779: D/dalvikvm(4131): GC_CONCURRENT freed 356K, 50% free 2991K/5895K, external 142K/512K, paused 21ms+14ms
11-19 21:21:19.659: I/System.out(4131): Pojeba這
 

Internet w tel jest włączony.

W manifescie uprawnienia też są:

Kopiuj
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
edytowany 1x, ostatnio: ufbufkruf
panryz
  • Rejestracja:około 17 lat
  • Ostatnio:7 minut
0

Log pokazuje że nie mógł połączyć się z serwerem(przejście do catch 'pomerdało') (spróbuj HttpClinet, HttpPost).
Log pokazuje brak mapy znaków. Odpalasz to może na AVD ?

edytowany 1x, ostatnio: panryz
UF
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:23
0

Witaj. Odpalam na telefonie. W tym rzecz, że wolałbym żeby zadziałało to na socet'cie

panryz
  • Rejestracja:około 17 lat
  • Ostatnio:7 minut
0

No to na bank masz źle postawione połączenie przez Socket.
A w logu widać że coś z klawiaturą nie tak

ZN
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:17
0

Nazwy klas zaczynamy wielką literą. Nie mieszamy języka polskiego z angielskim. Popraw kod, jest dużo powtórzeń i wygląda to bardzo niedobrze. Tego "pomerdało" nawet nie mam ochoty komentować, użyj e.printStackTrace() w bloku catch aby dowiedzieć się co powoduje błąd.

UF
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:23
0

Witam. Wielkie dzięki za porady stylistyczne, na pewno spróbuje to poprawić;). Masz racje z tym "pomerdało" nie wykazałem się klasą(to owoc frustracji).
Po Twojej radzie logi prezentują się następująco:

Kopiuj
 11-19 21:47:20.519: D/dalvikvm(4931): GC_EXTERNAL_ALLOC freed 80K, 49% free 2769K/5379K, external 0K/0K, paused 83ms
11-19 21:47:33.039: D/dalvikvm(4931): GC_CONCURRENT freed 228K, 50% free 2862K/5639K, external 142K/512K, paused 10ms+11ms
11-19 21:47:59.929: W/System.err(4931): java.net.SocketTimeoutException: Connection timed out
11-19 21:47:59.989: W/System.err(4931): 	at org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method)
11-19 21:47:59.989: W/System.err(4931): 	at dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:357)
11-19 21:47:59.999: W/System.err(4931): 	at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:204)
11-19 21:47:59.999: W/System.err(4931): 	at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
11-19 21:47:59.999: W/System.err(4931): 	at java.net.Socket.startupSocket(Socket.java:705)
11-19 21:47:59.999: W/System.err(4931): 	at java.net.Socket.tryAllAddresses(Socket.java:150)
11-19 21:47:59.999: W/System.err(4931): 	at java.net.Socket.<init>(Socket.java:209)
11-19 21:47:59.999: W/System.err(4931): 	at java.net.Socket.<init>(Socket.java:176)
11-19 21:48:00.009: W/System.err(4931): 	at com.example.spr.RejestracjaActivity$WatekRejestracji.doInBackground(RejestracjaActivity.java:191)
11-19 21:48:00.009: W/System.err(4931): 	at com.example.spr.RejestracjaActivity$WatekRejestracji.doInBackground(RejestracjaActivity.java:1)
11-19 21:48:00.009: W/System.err(4931): 	at android.os.AsyncTask$2.call(AsyncTask.java:185)
11-19 21:48:00.009: W/System.err(4931): 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
11-19 21:48:00.009: W/System.err(4931): 	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
11-19 21:48:00.009: W/System.err(4931): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
11-19 21:48:00.009: W/System.err(4931): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
11-19 21:48:00.009: W/System.err(4931): 	at java.lang.Thread.run(Thread.java:1019)

Wiem co może być problem. Gdy ostatnio sprawdzałem swoje ip (strony typu: http://www.moje-ip.eu/ ) było inne niż dziś. Serwerek stoi na moim laptopie, a po drodze jest router. Co o tym myślicie? Jak mogę to rozwiązać?

edytowany 1x, ostatnio: ufbufkruf
panryz
  • Rejestracja:około 17 lat
  • Ostatnio:7 minut
0

Apka dostałą Timeout'a.
Stawiam że nie dostałeś się do serwera, bo brak loginu i hasła lub serwera nie ma takiego.

Polecam ten artykuł:
http://examples.javacodegeeks.com/android/core/socket-core/android-socket-example/

edytowany 2x, ostatnio: panryz
UF
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:23
0

hmm.. Udało się połączyć. Problemem było tak jak podejrzewałem nie odpowiednie ip. Podłączyłem tel do sieci lokalnej i zaczęły się komunikować.

Jest nowy problem klient na androidzie wysyła paczkę(object) z danymi.

Kopiuj
 protected Void doInBackground(Void... params) {

			        try  
			        {  
			        	socket = new Socket(HOST, PORT);
						System.out.println("Polaczono");
				        OutputStream outStream = socket.getOutputStream();
				        out = new ObjectOutputStream(outStream); 
				        System.out.println("utworzono strumienie");
				    	Uzytkownik user2 = new Uzytkownik("Jan","Nowak","Siedlce",true,"JaNo","123","Wyszka",0);
						MsgPack msg = new MsgPack(true, 1, 2, true, "krwotok", true, user2);
						System.out.println("wysyla");
						out.writeObject(msg);
						if(msg.czyLokalizacja){System.out.println("lok");};
						System.out.println("wyslano");
				        System.out.println("zamykam");
				        out.close();  
				        socket.close(); 
			        }  
			        catch(Exception e)  
			        {  
			        	e.printStackTrace();
			        }
					return null;  
		}

log:

Kopiuj
11-20 00:06:44.369: W/KeyCharacterMap(8117): Can't open keycharmap file
11-20 00:06:44.369: W/KeyCharacterMap(8117): Error loading keycharmap file '/system/usr/keychars/sec_touchscreen.kcm.bin'. hw.keyboards.65537.devname='sec_touchscreen'
11-20 00:06:44.369: W/KeyCharacterMap(8117): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
11-20 00:06:45.169: W/IInputConnectionWrapper(8117): showStatusIcon on inactive InputConnection
11-20 00:07:03.609: D/dalvikvm(8117): GC_CONCURRENT freed 448K, 51% free 2969K/5959K, external 142K/512K, paused 9ms+5ms
11-20 00:07:07.409: I/System.out(8117): Polaczono
11-20 00:07:07.419: I/System.out(8117): utworzono strumienie
11-20 00:07:07.419: I/System.out(8117): wysyla
11-20 00:07:07.419: I/dalvikvm(8117): Jit: resizing JitTable from 512 to 1024
11-20 00:07:07.439: I/System.out(8117): lok
11-20 00:07:07.439: I/System.out(8117): wyslano
11-20 00:07:07.439: I/System.out(8117): zamykam 

serwer:

Kopiuj
public static void main(String[] args) throws IOException  
    {  
		int portNumber = 6000 ; 

		ServerSocket server = null;

		//public Vector<New_Client> vec = new Vector<New_Client>();

		System.out.println ("Serwer uruchomiony");

		while(true)
		{
			try {
				server = new ServerSocket(portNumber);
				Socket klientSocket = server.accept();
				System.out.println("Nowy klient");
				InputStream inStream = klientSocket.getInputStream();
				OutputStream outStream = klientSocket.getOutputStream();
				ObjectInputStream in = new ObjectInputStream(inStream);
				ObjectOutputStream out = new ObjectOutputStream(outStream);
				try {
					////////////////////////////
					Object o = (Object) in.readObject();
					if(in.equals(null)){
						System.out.println("pusto");
					}
					else System.out.println("cos jest");
					////////////////////////////
					if (((MsgPack) o).czyLokalizacja ) {
						System.out.print("Lokalizacja");

					
					}
					else { 
						System.out.println("nie Lokalizacja");
					}
					if(((MsgPack) o).czyRejestracja){
						System.out.println("Rejestracja");
					}
					else{
						System.out.println("nie Rejestracja");
					}
					if(((MsgPack)o).czyZgloszenie){
						//InetAddress ip = socket.getInetAddress();
						System.out.println("Zgloszenie");
					}
					else{
						System.out.println("nie Zgloszenie");
					}

				}catch (ClassNotFoundException e) {
					System.out.println("error");
					e.printStackTrace();
					System.out.println(e);
				} catch (NullPointerException npe) {
					
				}
			} catch (IOException ioe) {
				
				Thread.currentThread().interrupt();
			}
			//server.close();
		}

		}
	
} 

Oczywiście warunki to tylko szkielet do dalszej obróbki.

Konsola:

Kopiuj
Serwer uruchomiony
Nowy klient
error
java.lang.ClassNotFoundException: com.example.spr.MsgPack
java.lang.ClassNotFoundException: com.example.spr.MsgPack
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at java.io.ObjectInputStream.resolveClass(Unknown Source)
	at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
	at java.io.ObjectInputStream.readClassDesc(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at MojServer.main(MojServer.java:38) 

Czy dobrze rozumiem ze serwer krzyczy że nie może znaleźć klasy: com.example.spr.MsgPack
Zarówno w package apki z serwerem jak i tej na androida klasa ta się znajduje.

edytowany 1x, ostatnio: ufbufkruf
panryz
  • Rejestracja:około 17 lat
  • Ostatnio:7 minut
0

Widzę, że nie przeczytałeś artykułu który Ci podesłałem.
Serwer powinien pracować na nowych wątkach.

UF
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:23
0
ML
Oczywiście że tworzy.
panryz
Zgadza się, z tym że autor tematu wkleił informację że ma taki i taki serwer, a nie jest on rozszerzony o AsyncTask i nie ma też Runnable
UF
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:23
0

Więc to nie jest problem. Czy ktoś z Was ma pomysł jak mógłbym rozwiązać ten problem?

wojciechmaciejewski
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 lata
  • Postów:560
0

wypisuj zawsze stackTrace błędu bo tak to ciężko powiedzieć co jest przyczyną błędu....

UF
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:23
0

@panryz Czy w przypadku gdy serwer jest oddzielną aplikacją nie działającą na Androidzie też jest to konieczne?

Kopiuj
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;


/**
 * Wątek tworzący gniazdo serwera oraz oczekujący na nowych klientów. 
 */

public class MojServer
{

	public static void main(String[] args) throws IOException  
    {  
		final int portNumber = 6000 ; 

		//final ServerSocket server = null;

		//public Vector<New_Client> vec = new Vector<New_Client>();

		System.out.println ("Serwer uruchomiony");

			try {
				ServerSocket server = new ServerSocket(portNumber);
				Socket klientSocket = server.accept();
				System.out.println("Nowy klient");
				
				InputStream inStream = klientSocket.getInputStream();
				OutputStream outStream = klientSocket.getOutputStream();
				ObjectInputStream in = new ObjectInputStream(inStream);
				ObjectOutputStream out = new ObjectOutputStream(outStream);
				try {
					////////////////////////////
					//Object o = (Object) in.readObject();
					MsgPack msg = (MsgPack)in.readObject();
					if(in.equals(null)){
						System.out.println("pusto");
					}
					else System.out.println("cos jest");
					////////////////////////////
					if (msg.czyLokalizacja ) {
						System.out.print("Lokalizacja");

					
					}
					else { 
						System.out.println("nie Lokalizacja");
					}
					

				}catch (ClassNotFoundException e) {
					System.out.println("ClassNotFoundException");
					e.printStackTrace();
				} catch (NullPointerException npe) {
					System.out.println("NullPointerException");
					npe.printStackTrace();
				}
			} catch (IOException ioe) {
				System.out.println("IOException");
				ioe.printStackTrace();
				Thread.currentThread().interrupt();
			}
			//server.close();
		}    
    }

 

Kod po zmianach

a tu mamy wypisane bledy:

Kopiuj
Serwer uruchomiony
Nowy klient
ClassNotFoundException
java.lang.ClassNotFoundException: com.example.spr.MsgPack
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at java.io.ObjectInputStream.resolveClass(Unknown Source)
	at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
	at java.io.ObjectInputStream.readClassDesc(Unknown Source)
	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
	at java.io.ObjectInputStream.readObject0(Unknown Source)
	at java.io.ObjectInputStream.readObject(Unknown Source)
	at MojServer.main(MojServer.java:37)
 
wojciechmaciejewski
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 lata
  • Postów:560
0

nie masz importu klasy MsgPack to skąd ma wiedzieć co to to jest,jeżeli jest w tej samej paczce to okey.

Jeszcze pytanie czy masz zserializowane to cudo MsgPack,bo przy błędach serializacji wywala taki błąd zgodnie z dokumentacją https://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html

poka definicje klasy

UF
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:23
0
Kopiuj
 
import java.io.Serializable;

public class MsgPack implements Serializable {
	public boolean czyLokalizacja; 
	public double latitude ;
	public double longitude ;
	public boolean czyZgloszenie;
	public String zdarzenie;
	public boolean czyRejestracja;
	Uzytkownik uzytkownik;
	

	

	public MsgPack( boolean czyLok, double lat, double lon, boolean czyZglo, String zda, boolean czyRej, Uzytkownik user){
		czyLokalizacja = czyLok;
		czyZgloszenie = czyZglo;
		czyRejestracja = czyRej;
		
		if(czyLok){
			latitude = lat;
			longitude = lon;
		}
		if(czyZglo){
			zdarzenie = zda;
		}
		if(czyRej){
			uzytkownik = user;
		}

		
	}
} 

Oczywiście klasa ta znajduję się zarówno w paczce aplikacji na androida jak i w paczce serwera.

edytowany 1x, ostatnio: ufbufkruf
wojciechmaciejewski
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 lata
  • Postów:560
0

a ten użytkownik? tyż zserializowany ?

UF
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:23
0

Tak. Jedyna różnica jest taka że klasa znajdujące się w paczce wymaga jawnego podania tego że tam jest (package com.example.spr;), jeżeli to usune z którejś klasy (czy to uzytkownik czy MsgPack) to wywala błąd. Natomiast klasy te w paczce z serwerem nie posiadają takiego wpisu (paczka domyslna).

Dodam jeszcze, że gdy testowałem to na zwykłej aplikacji klienckiej(nie androidowej) to wszystko działało.

edytowany 1x, ostatnio: ufbufkruf
wojciechmaciejewski
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 lata
  • Postów:560
0

Ewidentnie jest błąd z deserializacją klasy MsgPack. Debugerem sprawdzałeś co jest przyjmowane w ty inStream ?

wiciu
  • Rejestracja:ponad 11 lat
  • Ostatnio:2 dni
  • Postów:1205
0

Ten kod jest straszny nawet jeśli przymknę oko na idiotyczne komunikaty. :/

Kilka słów kluczowych na początek:

  • Clean Code
  • Retrofit
  • OkHttp
  • RxJava (to na potem)

Jak już koniecznie chcesz używać tego AsyncTaska i wywoływać w nim jakieś operacje w UI, to użyj metody runOnUiThread().

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)