Доступ к интернету

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Доступ к интернету

Сообщение Mikhail_dev » 30 май 2013, 21:18

Где код второй активности? Сервис есть?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Доступ к интернету

Сообщение Foenix » 30 май 2013, 21:33

dimky писал(а):
Foenix писал(а):я вообще в этом не очень понимаю, но так просто сидеть и смотреть на ошибку тоже не годится. Я бы например, сформировала свободный от другого кода тестовый фрагмент и запустила бы его, просто чтобы проверить. Если ничего так и не получится, попробовать не на эмуляторе, а на устройстве (или наоборот), если и тогда ничего, то скинуть проект кому-то проверить, если нету знакомых, то сюда. Но он должен быть максимально простым, т.к. в дебрях кода просто реально нет ни у кого времени разбираться. Мы помогаем по мере сил и за минимально возможное время..
Яж не сижу 3 дня и только в эту ошибку смотрю, у меня и другие занятия есть, в свободное время занимаюсь вот этой бедой. :) Темболее что эта ошибка мне ничего не говорит.
так у нас тоже дела! мыж не возмущаемся!
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

dimky
Сообщения: 29
Зарегистрирован: 27 май 2013, 14:51

Re: Доступ к интернету

Сообщение dimky » 30 май 2013, 22:08

Не ну я не столько возмущаюсь отсутствию ответов, сколько реплик типа вот ошибка очень интересная, а что она означает, одному богу известно, ну да ладно. :)
Где код второй активности? Сервис есть?
Вот код второй активности, но до нее дело не доходит, затык происходит еще на стадии авторизации.
А что за сервис?

Код: Выделить всё

package com.part66online;

import java.util.ArrayList;
import java.util.HashMap;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.Toast;

public class ActivityTwo extends Activity implements OnTabChangeListener{
   
	TabHost tabHost;
	Button button_sign_out;
	
	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.logged);
           
        TabHost tabHost = (TabHost)findViewById(R.id.tabhost);
        
        tabHost.setup();   
        
        TabHost.TabSpec rssListSpec = tabHost.newTabSpec("Modules");
        rssListSpec.setIndicator("Modules");
        rssListSpec.setContent(R.id.modulesLayout);
        
        TabHost.TabSpec rssOutputSpec = tabHost.newTabSpec("Progress");
        rssOutputSpec.setIndicator("Progress");
        rssOutputSpec.setContent(R.id.progressLayout);
        
        TabHost.TabSpec settingsLayoutSpec = tabHost.newTabSpec("Settings");
        settingsLayoutSpec.setIndicator("Settings");
        settingsLayoutSpec.setContent(R.id.settingsLayout);
        
        tabHost.addTab(rssListSpec);
        tabHost.addTab(rssOutputSpec);
        tabHost.addTab(settingsLayoutSpec);
        
        tabHost.setCurrentTab(0);
        
        for(int i=0; i<tabHost.getTabWidget().getChildCount(); i++) 
        {
           tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#57CFFF"));
        }
         
        tabHost.setOnTabChangedListener(this);
         
        /////////////////////////////////////////////////////
        
        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
        
        String xml = ParseXMLMethods.getXML("http://part66online.com/api/modules_list.php");
        Document doc = ParseXMLMethods.XMLfromString(xml);
                
        int numResults = ParseXMLMethods.numResults(doc);
                
		NodeList children = doc.getElementsByTagName("module");
					
		for (int i = 0; i < children.getLength(); i++) {							
			HashMap<String, String> map = new HashMap<String, String>();	
			Element e = (Element)children.item(i);
			map.put("id", ParseXMLMethods.getValue(e, "id"));
        	map.put("name", ParseXMLMethods.getValue(e, "name"));
        	map.put("desc", ParseXMLMethods.getValue(e, "desc"));
        	mylist.add(map);			
		}		
       
        ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.list_layout, 
                        new String[] { "name", "desc" }, 
                        new int[] { R.id.title, R.id.subtitle});
        
        ListView mod_list = (ListView)findViewById(R.id.modules_list);
        mod_list.setAdapter(adapter);
        
        /////////////////////////////////////////////////////
        
        button_sign_out = (Button) findViewById(R.id.button_sign_out);
        button_sign_out.setOnClickListener(new OnClickListener(){
        	@Override
        	public void onClick(View v){
            	Context context = getApplicationContext();
            	CharSequence text = "Hello toast!";
            	int duration = Toast.LENGTH_SHORT;

            	Toast toast = Toast.makeText(context, text, duration);
            	toast.show();
        	}
        });
    } 
    
    public void onTabChanged(String tabId) {
	        //for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
	        //{
	        //    tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#C35817"));
	        //}
	        
    		//tabHost.getTabWidget().getChildAt(3).setBackgroundColor(Color.parseColor("#C35817"));
    }

}

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Доступ к интернету

Сообщение Mikhail_dev » 31 май 2013, 09:37

Попробуй это, думаю это из той оперы.

dimky
Сообщения: 29
Зарегистрирован: 27 май 2013, 14:51

Re: Доступ к интернету

Сообщение dimky » 31 май 2013, 14:46

Посмотрел. Попробовал завайпить как там указано - не помагает. А кеш dalvik я очистить не могу, так как на сколько я понимаю это можно сделать только на реальном устройстве. Я все тестирую на эмуляторе, устройства на андройде у меня нет.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Доступ к интернету

Сообщение KamiSempai » 31 май 2013, 14:52

Да тут на лицо обращение к интернету в главном потоке.
Вынесите это дело в другой поток и все заработает.

PS: Вот так просто вставлять в адресную строку данные введенные пользователем не самое лучшее и безопасное решение. У вас же POST запрос, передавайте логин и пароль через параметры.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

dimky
Сообщения: 29
Зарегистрирован: 27 май 2013, 14:51

Re: Доступ к интернету

Сообщение dimky » 31 май 2013, 14:56

А почему тогда при установке minsdk ниже, интернет есть?
А что означает вынести в другой поток?

Ну там ничего опастного нету на мой взгляд, скрипт на сервере просто выдает верны ли данные для входа или нет, никакой личной информации.
В любом случае сделаю конечно потом оптимальнее. Просто я только начал, то что я тут накалякал это мое первое знакомство с программированием под андроид.
Да и сам сайт, для которого я делаю клиент, не имеет внутри ценной пользовательской иформацией. Авторизация нужна лишь для проверки куплена ли подписка и для занесения результатов в базу.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Доступ к интернету

Сообщение Foenix » 31 май 2013, 14:59

dimky писал(а):А почему тогда при установке minsdk ниже, интернет есть?
Вот это как раз не удивительнО, тк. это ограничение было введено позже
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Доступ к интернету

Сообщение rezak90 » 31 май 2013, 15:03

в 2.3.3 и ниже ещё можно работать с сетью с главного потока, на 3 и выше уже в отдельном потоке, но всё равно всё лучше делать в отдельном
R.id.team
Политика на форуме запрещена

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Доступ к интернету

Сообщение KamiSempai » 31 май 2013, 15:04

dimky писал(а):А почему тогда при установке minsdk ниже, интернет есть?
А что означает вынести в другой поток?
Начина с 3 андроида это запрещено.
dimky писал(а):Ну там ничего опастного нету на мой взгляд, скрипт на сервере просто выдает верны ли данные для входа или нет, никакой личной информации.
В любом случае сделаю конечно потом оптимальнее. Просто я только начал, то что я тут накалякал это мое первое знакомство с программированием под андроид.
Да и сам сайт, для которого я делаю клиент, не имеет внутри ценной пользовательской иформацией. Авторизация нужна лишь для проверки куплена ли подписка и для занесения результатов в базу.
Что произойдет, если я буду использовать пароль "password&password=password"?

И еще кое-что. Когда у вас возникает ошибка в методе getXML Вы не выводите информацию о ней в лог, а просто записываете в переменную. Именно по этому Вам не могли долго помочь. Никогда так не делайте даже если точно уверены в работоспособности программы.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

dimky
Сообщения: 29
Зарегистрирован: 27 май 2013, 14:51

Re: Доступ к интернету

Сообщение dimky » 31 май 2013, 15:25

Ничего не будет :) Авторизация не пройдет.

Дело в том что я этот класс по работе с xml подсмотрел в уроке. Поэтому тонкостей всех пока не знаю. А что означает вынести в другой поток?


Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Доступ к интернету

Сообщение rezak90 » 31 май 2013, 17:50

no-- писал(а):Это означает вот что.
грубо
R.id.team
Политика на форуме запрещена

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Доступ к интернету

Сообщение Mikhail_dev » 31 май 2013, 18:16

Я не любитель грубить. Вопрос был из разряда сильно базовых. С таким вопросом надо учить java, а не андроид.

dimky
Сообщения: 29
Зарегистрирован: 27 май 2013, 14:51

Re: Доступ к интернету

Сообщение dimky » 31 май 2013, 22:24

Хорошо ребят, я понял что стоит двигатся в направлении AsyncTask. Прочел местный урок, пытаюсь реализовать. Но при обращении к UI элементу из метода onPreExecute() приложение вылетает. Почему так, что я делаю не правильно?

MainActivity после модификации стал таким:

Код: Выделить всё

package com.part66online;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener
{

	Button btnActTwo;
	TextView test_field;
	MyTask mt;
	String response;
	
	  @Override
	  public void onCreate(Bundle savedInstanceState)
	  {
		  super.onCreate(savedInstanceState);
	  	setContentView(R.layout.main);
	    
	  	btnActTwo = (Button) findViewById(R.id.login_button);
	  	btnActTwo.setOnClickListener((OnClickListener) this);
	  }
    
    public void onClick(View v)
    {
      switch (v.getId())
      {
      case R.id.login_button:
    	    mt = new MyTask();
    	    mt.execute();
        break;
      default:
        break;
      }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
    class MyTask extends AsyncTask<Void, Void, Void>
    {
        @Override
        protected void onPreExecute() {
          super.onPreExecute();
          test_field.setText("Connecting...");
        }    	
    	
        @Override
        protected Void doInBackground(Void... params)
        {
        	
        	final TextView login = (TextView) findViewById(R.id.login);
            final TextView pass = (TextView) findViewById(R.id.pass);
            final TextView test_field = (TextView) findViewById(R.id.text);
  	  
        	CharSequence username = login.getText();
        	CharSequence password = pass.getText();
        	
        	String response = ParseXMLMethods.getXML("http://part66online.com/api/login.php?username=" + username + "&password=" + password);
        	
        	return null;
        }
        
        @Override
        protected void onPostExecute(Void result)
        {
        	super.onPostExecute(result);
        	
        	/*
        	if(response.equals("ok"))
        	{
        	      //Intent intent = new Intent(this, ActivityTwo.class);
        	      //startActivity(intent);    		
        			test_field.setText("ok");
        	}
        	else
        	{
        		test_field.setText(response);           
        	}
        	*/
        }
      }   
}
В логкате такое:

Код: Выделить всё

05-31 19:20:47.225: D/AndroidRuntime(13117): Shutting down VM
05-31 19:20:47.225: W/dalvikvm(13117): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
05-31 19:20:47.245: E/AndroidRuntime(13117): FATAL EXCEPTION: main
05-31 19:20:47.245: E/AndroidRuntime(13117): java.lang.NullPointerException
05-31 19:20:47.245: E/AndroidRuntime(13117): 	at com.part66online.MainActivity$MyTask.onPreExecute(MainActivity.java:56)
05-31 19:20:47.245: E/AndroidRuntime(13117): 	at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
05-31 19:20:47.245: E/AndroidRuntime(13117): 	at android.os.AsyncTask.execute(AsyncTask.java:534)
05-31 19:20:47.245: E/AndroidRuntime(13117): 	at com.part66online.MainActivity.onClick(MainActivity.java:36)
05-31 19:20:47.245: E/AndroidRuntime(13117): 	at android.view.View.performClick(View.java:4204)
05-31 19:20:47.245: E/AndroidRuntime(13117): 	at android.view.View$PerformClick.run(View.java:17355)
05-31 19:20:47.245: E/AndroidRuntime(13117): 	at android.os.Handler.handleCallback(Handler.java:725)
05-31 19:20:47.245: E/AndroidRuntime(13117): 	at android.os.Handler.dispatchMessage(Handler.java:92)
05-31 19:20:47.245: E/AndroidRuntime(13117): 	at android.os.Looper.loop(Looper.java:137)
05-31 19:20:47.245: E/AndroidRuntime(13117): 	at android.app.ActivityThread.main(ActivityThread.java:5041)
05-31 19:20:47.245: E/AndroidRuntime(13117): 	at java.lang.reflect.Method.invokeNative(Native Method)
05-31 19:20:47.245: E/AndroidRuntime(13117): 	at java.lang.reflect.Method.invoke(Method.java:511)
05-31 19:20:47.245: E/AndroidRuntime(13117): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-31 19:20:47.245: E/AndroidRuntime(13117): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-31 19:20:47.245: E/AndroidRuntime(13117): 	at dalvik.system.NativeStart.main(Native Method)
05-31 19:20:47.296: W/ActivityManager(317):   Force finishing activity com.part66online/.MainActivity
05-31 19:20:47.305: W/WindowManager(317): Failure taking screenshot for (246x410) to layer 21015
05-31 19:20:47.485: E/SurfaceFlinger(37): ro.sf.lcd_density must be defined as a build property
05-31 19:20:47.825: W/ActivityManager(317): Activity pause timeout for ActivityRecord{40cd4220 u0 com.part66online/.MainActivity}
05-31 19:20:48.175: E/SurfaceFlinger(37): ro.sf.lcd_density must be defined as a build property

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Доступ к интернету

Сообщение rezak90 » 31 май 2013, 23:05

ой какая каша, удаляй всё пока никто не видел)))
в асинхронном потоке ты инициализируешь TextView что уже не правильно, а обращаешься к нему в onPreExecute а он там ещё нуловый, потому что onPreExecute выполняется раньше чем doInBackground. Проходи ещё раз урок и внимательней.
R.id.team
Политика на форуме запрещена

dimky
Сообщения: 29
Зарегистрирован: 27 май 2013, 14:51

Re: Доступ к интернету

Сообщение dimky » 01 июн 2013, 14:20

Понял, вынес в метод onCreate.

Судя по уроку, onPreExecute и onPostExecute имеют доступ к UI, следовательно я могу взаимодействовать с интерфейсом в этих методах.
Сделал вот так, совсем просто:

Код: Выделить всё

package com.part66online;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener
{
	Button btnActTwo;
	TextView test_field;
	MyTask mt;
	String response;
	TextView login;
	TextView pass;
	
	  @SuppressWarnings("unused")
	  @Override
	  public void onCreate(Bundle savedInstanceState)
	  {
		  super.onCreate(savedInstanceState);
		  setContentView(R.layout.main);
	  	
		  TextView login = (TextView) findViewById(R.id.login);
		  TextView pass = (TextView) findViewById(R.id.pass);
		  TextView test_field = (TextView) findViewById(R.id.text);  

		  btnActTwo = (Button) findViewById(R.id.login_button);
		  btnActTwo.setOnClickListener((OnClickListener) this);
	  }
    
    public void onClick(View v)
    {
      switch (v.getId())
      {
      case R.id.login_button:
    	    mt = new MyTask();
    	    mt.execute();
        break;
      default:
        break;
      }
    }

    class MyTask extends AsyncTask<Void, Void, Void>
    {
        @Override
        protected void onPreExecute()
        {
          super.onPreExecute();
          test_field.setText("Connecting...");
        }    	
    	
        @Override
        protected Void doInBackground(Void... params)
        {
        	return null;
        }
        
        @Override
        protected void onPostExecute(Void result)
        {
        	super.onPostExecute(result);       	
                test_field.setText("Complete"); 
        }
      }   
}
Приложение вываливается со следующим логом:

Код: Выделить всё

06-01 11:15:42.555: E/AndroidRuntime(28377): FATAL EXCEPTION: main
06-01 11:15:42.555: E/AndroidRuntime(28377): java.lang.NullPointerException
06-01 11:15:42.555: E/AndroidRuntime(28377): 	at com.part66online.MainActivity$MyTask.onPreExecute(MainActivity.java:67)
06-01 11:15:42.555: E/AndroidRuntime(28377): 	at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
06-01 11:15:42.555: E/AndroidRuntime(28377): 	at android.os.AsyncTask.execute(AsyncTask.java:534)
06-01 11:15:42.555: E/AndroidRuntime(28377): 	at com.part66online.MainActivity.onClick(MainActivity.java:44)
06-01 11:15:42.555: E/AndroidRuntime(28377): 	at android.view.View.performClick(View.java:4204)
06-01 11:15:42.555: E/AndroidRuntime(28377): 	at android.view.View$PerformClick.run(View.java:17355)
06-01 11:15:42.555: E/AndroidRuntime(28377): 	at android.os.Handler.handleCallback(Handler.java:725)
06-01 11:15:42.555: E/AndroidRuntime(28377): 	at android.os.Handler.dispatchMessage(Handler.java:92)
06-01 11:15:42.555: E/AndroidRuntime(28377): 	at android.os.Looper.loop(Looper.java:137)
06-01 11:15:42.555: E/AndroidRuntime(28377): 	at android.app.ActivityThread.main(ActivityThread.java:5041)
06-01 11:15:42.555: E/AndroidRuntime(28377): 	at java.lang.reflect.Method.invokeNative(Native Method)
06-01 11:15:42.555: E/AndroidRuntime(28377): 	at java.lang.reflect.Method.invoke(Method.java:511)
06-01 11:15:42.555: E/AndroidRuntime(28377): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-01 11:15:42.555: E/AndroidRuntime(28377): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-01 11:15:42.555: E/AndroidRuntime(28377): 	at dalvik.system.NativeStart.main(Native Method)
Жаль что причина вылета не пишется явно, я вот пишу еще время от времени на php или С для микроконтроллеров, там все ошибки боле менее явным образом выделяются. Тут же этот лог мне ничего не говорит. Может я не в тот лог смотрю? :)

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Доступ к интернету

Сообщение Foenix » 01 июн 2013, 14:28

куда уж более явно. Щелкни два раза на строчке с нуллпоинтерэксепшн - перекинет на строку, где ошибка.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

dimky
Сообщения: 29
Зарегистрирован: 27 май 2013, 14:51

Re: Доступ к интернету

Сообщение dimky » 01 июн 2013, 14:31

Да, точно, спасибо за подсказку. :)

Ругается на эту строку: test_field.setText("Connecting...");
Не понимаю, все сделанно аналогично уроку http://startandroid.ru/ru/uroki/vse-uro ... rimer.html
--------------------------------
АП. Разобрался с перемеными, теперь все работает, доступ к интернету есть, авторизация выполняется. Спасибо всем за содействие. Скоро буду мучать вас дальше. :)

Ответить