ViewPager AsyncTask и JSON

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
Максим Янчий
Сообщения: 77
Зарегистрирован: 21 июл 2013, 17:33

ViewPager AsyncTask и JSON

Сообщение Максим Янчий » 16 фев 2014, 19:57

Здравствуйте!
При создании проекта в Eclipse выбрал дефолтный вариант навигации через ViewPager.
Требуется узнать с сервера данные и получить их на приложение.
Как это правильно сделать?
вот код сгенерированный Eclips'ом:

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


import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import parser.JSONParser;
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends FragmentActivity implements
		ActionBar.TabListener {

	/**
	 * The {@link android.support.v4.view.PagerAdapter} that will provide
	 * fragments for each of the sections. We use a
	 * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which
	 * will keep every loaded fragment in memory. If this becomes too memory
	 * intensive, it may be best to switch to a
	 * {@link android.support.v4.app.FragmentStatePagerAdapter}.
	 */
	SectionsPagerAdapter mSectionsPagerAdapter;

	/**
	 * The {@link ViewPager} that will host the section contents.
	 */
	ViewPager mViewPager;
	JSONParser jParser;
	JSONArray alias = null;
	private ProgressDialog pDialog;
	TextView textViewName;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// Set up the action bar.
		final ActionBar actionBar = getActionBar();
		actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

		// Create the adapter that will return a fragment for each of the three
		// primary sections of the app.
		mSectionsPagerAdapter = new SectionsPagerAdapter(
				getSupportFragmentManager());

		// Set up the ViewPager with the sections adapter.
		mViewPager = (ViewPager) findViewById(R.id.pager);
		mViewPager.setAdapter(mSectionsPagerAdapter);

		// When swiping between different sections, select the corresponding
		// tab. We can also use ActionBar.Tab#select() to do this if we have
		// a reference to the Tab.
		mViewPager
				.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
					@Override
					public void onPageSelected(int position) {
						actionBar.setSelectedNavigationItem(position);
					}
				});

		// For each of the sections in the app, add a tab to the action bar.
		for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
			// Create a tab with text corresponding to the page title defined by
			// the adapter. Also specify this Activity object, which implements
			// the TabListener interface, as the callback (listener) for when
			// this tab is selected.
			actionBar.addTab(actionBar.newTab()
					.setText(mSectionsPagerAdapter.getPageTitle(i))
					.setTabListener(this));
		}
	}

	@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;
	}

	@Override
	public void onTabSelected(ActionBar.Tab tab,
			FragmentTransaction fragmentTransaction) {
		// When the given tab is selected, switch to the corresponding page in
		// the ViewPager.
		mViewPager.setCurrentItem(tab.getPosition());
	}

	@Override
	public void onTabUnselected(ActionBar.Tab tab,
			FragmentTransaction fragmentTransaction) {
	}

	@Override
	public void onTabReselected(ActionBar.Tab tab,
			FragmentTransaction fragmentTransaction) {
	}

	/**
	 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
	 * one of the sections/tabs/pages.
	 */
	public class SectionsPagerAdapter extends FragmentPagerAdapter {

		public SectionsPagerAdapter(FragmentManager fm) {
			super(fm);
		}

		@Override
		public Fragment getItem(int position) {
			// getItem is called to instantiate the fragment for the given page.
			// Return a DummySectionFragment (defined as a static inner class
			// below) with the page number as its lone argument.
			Fragment fragment = new DummySectionFragment();
			Bundle args = new Bundle();
			args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1);
			fragment.setArguments(args);
			return fragment;
		}

		@Override
		public int getCount() {
			// Show 4 total pages.
			return 4;
		}

		@Override
		public CharSequence getPageTitle(int position) {
			Locale l = Locale.getDefault();
			switch (position) {
			case 0:
				return getString(R.string.title_section1).toUpperCase(l);
			case 1:
				return getString(R.string.title_section2).toUpperCase(l);
			case 2:
				return getString(R.string.title_section3).toUpperCase(l);
			case 3:
				return getString(R.string.title_section4).toUpperCase(l);
			}
			return null;
		}
	}

	
	public static class DummySectionFragment extends Fragment {
		/**
		 * The fragment argument representing the section number for this
		 * fragment.
		 */
		public static final String ARG_SECTION_NUMBER = "section_number";

		public DummySectionFragment() {
		}

		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container,
				Bundle savedInstanceState) {
			int pos = getArguments().getInt(
					ARG_SECTION_NUMBER);
			View rootView = null;
			switch(pos){
			case 1: 
				rootView = inflater.inflate(R.layout.fragment_main_dummy,
					container, false);
			TextView dummyTextView = (TextView) rootView
					.findViewById(R.id.section_label);
			dummyTextView.setText("Nice first label");
			break;
			case 2: 
				rootView = inflater.inflate(R.layout.fragment_friends,
					container, false);
			TextView dummyTextViewFriends = (TextView) rootView
					.findViewById(R.id.section_label);
			dummyTextViewFriends.setText("Nice second label");
			break;
			case 3: 
				rootView = inflater.inflate(R.layout.fragment_blogs,
					container, false);
			TextView dummyTextViewBlogs = (TextView) rootView
					.findViewById(R.id.section_label);
			dummyTextViewBlogs.setText("Nice third label");
			break;
			case 4: 
				rootView = inflater.inflate(R.layout.fragment_circles,
					container, false);
			TextView dummyTextViewCircles = (TextView) rootView
					.findViewById(R.id.section_label);
			dummyTextViewCircles.setText("Nice fourth label");
			break;
			
			}
			return rootView;
	}
	}
}

Я сюда только добавил переход между фрагментами.
Заранее спасибо за ответ!

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

Re: ViewPager AsyncTask и JSON

Сообщение Mikhail_dev » 16 фев 2014, 20:52

Не понял вопроса честно говоря. Через запрос к серверу это сделать. Связи с ViewPager не увидел в вопросе.

Максим Янчий
Сообщения: 77
Зарегистрирован: 21 июл 2013, 17:33

Re: ViewPager AsyncTask и JSON

Сообщение Максим Янчий » 16 фев 2014, 20:55

m090050 писал(а):Не понял вопроса честно говоря. Через запрос к серверу это сделать. Связи с ViewPager не увидел в вопросе.
Я не пойму как и куда потом применить полученные данные(в какой раздел, класс, впервые вообще работаю с ними).
Буду очень признателен за пару лишних строчек кода. Весь день над этим просидел.
Заранее спасибо!

Максим Янчий
Сообщения: 77
Зарегистрирован: 21 июл 2013, 17:33

Re: ViewPager AsyncTask и JSON

Сообщение Максим Янчий » 16 фев 2014, 20:59

m090050 писал(а):Не понял вопроса честно говоря. Через запрос к серверу это сделать. Связи с ViewPager не увидел в вопросе.
Где этот запрос лучше разместить?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: ViewPager AsyncTask и JSON

Сообщение altwin » 16 фев 2014, 21:35

Максим Янчий писал(а):
m090050 писал(а):Не понял вопроса честно говоря. Через запрос к серверу это сделать. Связи с ViewPager не увидел в вопросе.
Я не пойму как и куда потом применить полученные данные(в какой раздел, класс, впервые вообще работаю с ними).
Буду очень признателен за пару лишних строчек кода. Весь день над этим просидел.
Заранее спасибо!
в google слишком много примеров кода, чтобы у кого -то было желание просто копировать. Если есть конкретная проблема - пожалуйста, но ниодин программист не напишет код вместо вас бесплатно.
http://www.learn2crack.com/2013/10/andr ... ample.html
Изображение

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

Re: ViewPager AsyncTask и JSON

Сообщение Mikhail_dev » 16 фев 2014, 21:37

А понял. Прочтите заметку в мое подписи, первую. Там ответ на вашу просьбу.

Максим Янчий
Сообщения: 77
Зарегистрирован: 21 июл 2013, 17:33

Re: ViewPager AsyncTask и JSON

Сообщение Максим Янчий » 16 фев 2014, 22:29

altwin писал(а):
Максим Янчий писал(а):
m090050 писал(а):Не понял вопроса честно говоря. Через запрос к серверу это сделать. Связи с ViewPager не увидел в вопросе.
Я не пойму как и куда потом применить полученные данные(в какой раздел, класс, впервые вообще работаю с ними).
Буду очень признателен за пару лишних строчек кода. Весь день над этим просидел.
Заранее спасибо!
в google слишком много примеров кода, чтобы у кого -то было желание просто копировать. Если есть конкретная проблема - пожалуйста, но ниодин программист не напишет код вместо вас бесплатно.
http://www.learn2crack.com/2013/10/andr ... ample.html
А после того как получил данные с сервера, как правильно расположить метод
потому, что у меня выдает ошибку.

Аватара пользователя
mdzht
Сообщения: 124
Зарегистрирован: 11 ноя 2013, 11:33
Откуда: fock it
Контактная информация:

Re: ViewPager AsyncTask и JSON

Сообщение mdzht » 21 фев 2014, 09:18

В этом примере при смене ориентации активити вроде пытается сказать с меня хватит,

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

02-21 06:16:47.000: E/WindowManager(1842): Activity learn2crack.asynctask.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@b6572e20 that was originally added here
02-21 06:16:47.000: E/WindowManager(1842): android.view.WindowLeaked: Activity learn2crack.asynctask.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@b6572e20 that was originally added here
02-21 06:16:47.000: E/WindowManager(1842): 	at android.view.ViewRoot.<init>(ViewRoot.java:258)
02-21 06:16:47.000: E/WindowManager(1842): 	at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
02-21 06:16:47.000: E/WindowManager(1842): 	at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
02-21 06:16:47.000: E/WindowManager(1842): 	at android.view.Window$LocalWindowManager.addView(Window.java:424)
02-21 06:16:47.000: E/WindowManager(1842): 	at android.app.Dialog.show(Dialog.java:241)
02-21 06:16:47.000: E/WindowManager(1842): 	at learn2crack.asynctask.MainActivity$JSONParse.onPreExecute(MainActivity.java:70)
02-21 06:16:47.000: E/WindowManager(1842): 	at android.os.AsyncTask.execute(AsyncTask.java:391)
02-21 06:16:47.000: E/WindowManager(1842): 	at learn2crack.asynctask.MainActivity$1.onClick(MainActivity.java:47)
02-21 06:16:47.000: E/WindowManager(1842): 	at android.view.View.performClick(View.java:2485)
02-21 06:16:47.000: E/WindowManager(1842): 	at android.view.View$PerformClick.run(View.java:9080)
02-21 06:16:47.000: E/WindowManager(1842): 	at android.os.Handler.handleCallback(Handler.java:587)
02-21 06:16:47.000: E/WindowManager(1842): 	at android.os.Handler.dispatchMessage(Handler.java:92)
02-21 06:16:47.000: E/WindowManager(1842): 	at android.os.Looper.loop(Looper.java:130)
02-21 06:16:47.000: E/WindowManager(1842): 	at android.app.ActivityThread.main(ActivityThread.java:3683)
02-21 06:16:47.000: E/WindowManager(1842): 	at java.lang.reflect.Method.invokeNative(Native Method)
02-21 06:16:47.000: E/WindowManager(1842): 	at java.lang.reflect.Method.invoke(Method.java:507)
02-21 06:16:47.000: E/WindowManager(1842): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-21 06:16:47.000: E/WindowManager(1842): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-21 06:16:47.000: E/WindowManager(1842): 	at dalvik.system.NativeStart.main(Native Method)

mainactivity.java

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

package learn2crack.asynctask;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import learn2crack.asynctask.library.JSONParser;



public class MainActivity extends Activity {
	TextView uid;
	TextView name1;
	TextView email1;
	Button Btngetdata;
	
	//URL to get JSON Array
	private static String url = "http://10.0.3.2/jsonlogin/";
	
	//JSON Node Names 
	private static final String TAG_USER = "user";
	private static final String TAG_ID = "id";
	private static final String TAG_NAME = "name";
	private static final String TAG_EMAIL = "email";
	
	JSONArray user = null;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      
        setContentView(R.layout.activity_main);
        Btngetdata = (Button)findViewById(R.id.getdata);
        Btngetdata.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View view) {
		         new JSONParse().execute();

				
			}
		});
        
        
    }


    
    private class JSONParse extends AsyncTask<String, String, JSONObject> {
    	 private ProgressDialog pDialog;
    	@Override
        protected void onPreExecute() {
            super.onPreExecute();
             uid = (TextView)findViewById(R.id.uid);
			 name1 = (TextView)findViewById(R.id.name);
			 email1 = (TextView)findViewById(R.id.email);
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Getting Data ...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
            
    	}
    	
    	@Override
        protected JSONObject doInBackground(String... args) {
    		JSONParser jParser = new JSONParser();

    		// Getting JSON from URL
    		JSONObject json = jParser.getJSONFromUrl(url);
    		return json;
    	}
    	 @Override
         protected void onPostExecute(JSONObject json) {
    		 pDialog.dismiss();
    		 try {
    				// Getting JSON Array
    				user = json.getJSONArray(TAG_USER);
    				JSONObject c = user.getJSONObject(0);
    				
    				// Storing  JSON item in a Variable
    				String id = c.getString(TAG_ID);
    				String name = c.getString(TAG_NAME);
    				String email = c.getString(TAG_EMAIL);
    				
    				
    				//Set JSON Data in TextView
    				uid.setText(id);
    				name1.setText(name);
    				email1.setText(email);

    			
    		} catch (JSONException e) {
    			e.printStackTrace();
    		}

    		 
    	 }
    }
    
}


а тут http://www.androidhive.info/2012/01/and ... -tutorial/

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

package info.androidhive.jsonparsing;

import info.androidhive.jsonparsing.R;
import java.util.ArrayList;
import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class MainActivity extends ListActivity {

	private ProgressDialog pDialog;

	// URL to get contacts JSON
	private static String url = "http://api.androidhive.info/contacts/";

	// JSON Node names
	private static final String TAG_CONTACTS = "contacts";
	private static final String TAG_ID = "id";
	private static final String TAG_NAME = "name";
	private static final String TAG_EMAIL = "email";
	private static final String TAG_ADDRESS = "address";
	private static final String TAG_GENDER = "gender";
	private static final String TAG_PHONE = "phone";
	private static final String TAG_PHONE_MOBILE = "mobile";
	private static final String TAG_PHONE_HOME = "home";
	private static final String TAG_PHONE_OFFICE = "office";

	// contacts JSONArray
	JSONArray contacts = null;

	// Hashmap for ListView
	ArrayList<HashMap<String, String>> contactList;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		contactList = new ArrayList<HashMap<String, String>>();

		ListView lv = getListView();

		// Listview on item click listener
		lv.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// getting values from selected ListItem
				String name = ((TextView) view.findViewById(R.id.name))
						.getText().toString();
				String cost = ((TextView) view.findViewById(R.id.email))
						.getText().toString();
				String description = ((TextView) view.findViewById(R.id.mobile))
						.getText().toString();

				// Starting single contact activity
				Intent in = new Intent(getApplicationContext(),
						SingleContactActivity.class);
				in.putExtra(TAG_NAME, name);
				in.putExtra(TAG_EMAIL, cost);
				in.putExtra(TAG_PHONE_MOBILE, description);
				startActivity(in);

			}
		});

		// Calling async task to get json
		new GetContacts().execute();
	}

	/**
	 * Async task class to get json by making HTTP call
	 * */
	private class GetContacts extends AsyncTask<Void, Void, Void> {

		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			// Showing progress dialog
			pDialog = new ProgressDialog(MainActivity.this);
			pDialog.setMessage("Please wait...");
			pDialog.setCancelable(false);
			pDialog.show();

		}

		@Override
		protected Void doInBackground(Void... arg0) {
			// Creating service handler class instance
			ServiceHandler sh = new ServiceHandler();

			// Making a request to url and getting response
			String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);

			Log.d("Response: ", "> " + jsonStr);

			if (jsonStr != null) {
				try {
					JSONObject jsonObj = new JSONObject(jsonStr);
					
					// Getting JSON Array node
					contacts = jsonObj.getJSONArray(TAG_CONTACTS);

					// looping through All Contacts
					for (int i = 0; i < contacts.length(); i++) {
						JSONObject c = contacts.getJSONObject(i);
						
						String id = c.getString(TAG_ID);
						String name = c.getString(TAG_NAME);
						String email = c.getString(TAG_EMAIL);
						String address = c.getString(TAG_ADDRESS);
						String gender = c.getString(TAG_GENDER);

						// Phone node is JSON Object
						JSONObject phone = c.getJSONObject(TAG_PHONE);
						String mobile = phone.getString(TAG_PHONE_MOBILE);
						String home = phone.getString(TAG_PHONE_HOME);
						String office = phone.getString(TAG_PHONE_OFFICE);

						// tmp hashmap for single contact
						HashMap<String, String> contact = new HashMap<String, String>();

						// adding each child node to HashMap key => value
						contact.put(TAG_ID, id);
						contact.put(TAG_NAME, name);
						contact.put(TAG_EMAIL, email);
						contact.put(TAG_PHONE_MOBILE, mobile);

						// adding contact to contact list
						contactList.add(contact);
					}
				} catch (JSONException e) {
					e.printStackTrace();
				}
			} else {
				Log.e("ServiceHandler", "Couldn't get any data from the url");
			}

			return null;
		}

		@Override
		protected void onPostExecute(Void result) {
			super.onPostExecute(result);
			// Dismiss the progress dialog
			if (pDialog.isShowing())
				pDialog.dismiss();
			/**
			 * Updating parsed JSON data into ListView
			 * */
			ListAdapter adapter = new SimpleAdapter(
					MainActivity.this, contactList,
					R.layout.list_item, new String[] { TAG_NAME, TAG_EMAIL,
							TAG_PHONE_MOBILE }, new int[] { R.id.name,
							R.id.email, R.id.mobile });

			setListAdapter(adapter);
		}

	}

}
просто перезагружается, вот интрига, почему?
«Life is too short to spend rewriting code»

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: ViewPager AsyncTask и JSON

Сообщение altwin » 21 фев 2014, 14:56

mdzht писал(а): В этом примере при смене ориентации активити вроде пытается сказать с меня хватит,
скорее всего нужно сделать pDialog.dismiss(); перед тем, как Activity уничтожается. Либо проще добавить в манифест: [syntax=xml]android:configChanges="orientation|keyboardHidden|navigation"[/syntax]
Изображение

Аватара пользователя
mdzht
Сообщения: 124
Зарегистрирован: 11 ноя 2013, 11:33
Откуда: fock it
Контактная информация:

Re: ViewPager AsyncTask и JSON

Сообщение mdzht » 21 фев 2014, 17:30

altwin писал(а):Либо проще добавить в манифест: [syntax=xml]android:configChanges="orientation|keyboardHidden|navigation"[/syntax]
pDialog.dismiss(); делается. [syntax=xml]android:configChanges="orientation|keyboardHidden|navigation"[/syntax][/quote] не помогло, смотрите что говорит пример с блога androidhive. При смене ориентации в логкете появляется надпись

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

02-21 14:23:43.292: I/WindowManager(1109): Setting rotation to 1, animFlags=0
02-21 14:23:43.292: E/SurfaceFlinger(1109): setOrientation with orientation=1
02-21 14:23:43.292: E/SurfaceFlinger(1109): setOrientation orientation=1
02-21 14:23:43.292: E/FramebufferNativeWindow(1109): setOrientation with fbDev=0x8455cc8 fbDev->setOrientation=0x85200c10 orientation=1
«Life is too short to spend rewriting code»

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: ViewPager AsyncTask и JSON

Сообщение altwin » 21 фев 2014, 17:35

значит нужно перед тем, как его показывать делать:
[syntax=java5]
if(!this.isFinishing()){
dialog.show();
}
[/syntax]
MainActivity has leaked window, подразумевает что в Activity что то происходит, когда она уже / еще не существует.
Изображение

Аватара пользователя
mdzht
Сообщения: 124
Зарегистрирован: 11 ноя 2013, 11:33
Откуда: fock it
Контактная информация:

Re: ViewPager AsyncTask и JSON

Сообщение mdzht » 23 фев 2014, 09:46

altwin писал(а):значит нужно перед тем, как его показывать делать:
[syntax=java5]
if(!this.isFinishing()){
dialog.show();
}
[/syntax]
MainActivity has leaked window, подразумевает что в Activity что то происходит, когда она уже / еще не существует.
Да оказывается в примере с androidhive есть такая строка
[syntax=java5]if (pDialog.isShowing())
pDialog.dismiss();[/syntax]
я добавил, но проблема не решена, has leaked всплывает также. Этот кусок кода, с сайта learn2crack, выглядит очень подозрительным
[syntax=java5] try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close(); // БАМ!!!
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}[/syntax]
«Life is too short to spend rewriting code»

Ответить