formats

Custom ListView

Это конечно не UItableView в Хcode ? но тоже мало понятно =)

Итак сначала вьюхаха элемента списка:

<?xml version=»1.0″ encoding=»utf-8″?>
<LinearLayout xmlns:android=»http://schemas.android.com/apk/res/android»
android:orientation=»vertical» android:layout_width=»match_parent»
android:layout_height=»match_parent»
android:padding=»5dp»>
<!—
<ImageView
android:id=»@+id/logo»
android:layout_width=»50px»
android:layout_height=»50px»
android:layout_marginLeft=»5px»
android:layout_marginRight=»20px»
android:layout_marginTop=»5px» >
</ImageView>
—>
<TextView
android:id=»@+id/label»
android:layout_width=»wrap_content»
android:layout_height=»wrap_content»
android:textSize=»12px» >
</TextView>
</LinearLayout>

Складывать данный xml в res/layouts

Далее делаем класс для одной записи в списке. В данном примере храним название и id в БД.

public class DietList {
private int id;
private String name;
public DietList(int id,String name)
{
this.id = id;
this.name = name;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

Теперь адаптер данных для листа (ихмо мне это нравится больше чем аналог в Xcode):

public class DietListAdapter extends ArrayAdapter<DietList> {
private ArrayList<DietList> entries;
private Activity activity;
public DietListAdapter(Context context, int resource, int textViewResourceId, List<DietList> objects) {
super(context, resource, textViewResourceId, objects);
}
public DietListAdapter(final Activity a, final int textViewResourceId, final ArrayList<DietList> entries) {

super(a, textViewResourceId, entries);
this.entries = entries;
activity = a;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {

View v = convertView;
ViewHolder holder;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.dietlist, parent, false);
holder = new ViewHolder();
// инициализируем нашу разметку
holder.textView = (TextView) v.findViewById(R.id.label);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
DietList DL = entries.get(position);
if ( DL != null) {
// получаем текст из массива
holder.textView.setText( DL.getName());
}
return v;
}

// для быстроты вынесли в отдельный класс
private static class ViewHolder {

//public ImageView imageView;
public TextView textView;
}
}

Заполняем лист данными примерно так:

 

ListView listView;
listView = (ListView) findViewById(R.id.listView);
listView.clearChoices();
listView.setAdapter(new DietListAdapter(MainActivity.this, R.id.listView, db.getDietsList2()));

Теперь вся магия хитрого класса записи при клике по элементу списка:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
DietList lsd = (DietList)adapterView.getItemAtPosition(i);
Log.i(TAG,Integer.toString(lsd.getId()));
Intent intent = new Intent(MainActivity.this, DietViewActivity.class);
intent.putExtra(«selectedValue», lsd.getId());
startActivity(intent);
}
}
);

Удобно правда =) Никаких капаний в исходном массиве.

А массив исходных данных получается примерно так:

public ArrayList<DietList> getDietsList2()
{
Log.i(«===»,»getDietsList2t»);
ArrayList<DietList> s = new ArrayList<DietList>();
Log.i(«===»,»List<DietList>»);
Cursor query = mDB.query(DB_TABLE_LIST, new String[]{«id», «name», «sort», «hash»},null,null,null,null,»sort» );
if (query == null ) {
Log.i(«===»,»query == null»);
return s; // Запрос упал возращаем пустой результат
}
if (!query.moveToFirst())
{
Log.i(«===»,»!query.moveToFirst()»);
return s; // Запрос пустой чтоли возращаем пустой результат
}
do {
s.add(new DietList(
query.getInt(query.getColumnIndex(«id»)),
query.getString(query.getColumnIndex(«name»))
));
}while (query.moveToNext());
Log.i(«===»,»After do»);
return s;
}

Related Posts:

  • No Related Posts
 
formats

Проверка на пустую строку NSString Ios ObjC

У меня php головного мозга , ну не empty в objC проверка на пустоту строки и не !=/==

if ([self.string1 isEqualToString:@""])
{
/* Строка пустая */
}

Related Posts:

 
Теги:
formats

Создаем папку под файлы на андроид

Если надо папку под файлы без всяких проверок, но желательно карте памяти

public String makeFolder()
{
String path=»";
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
path = Environment.getExternalStorageDirectory().getPath();
path += «/»;
}
path +=»dir/»;
File dir = new File(path);
if (!dir.exists()) dir.mkdirs();
Log.i(«—»,path);
return path;
// Environment.getExternalStorageDirectory();
}

Related Posts:

 
Теги:
formats

Open Sources

Открываю довольно знатное количество «кода не по дзену»:
https://bitbucket.org/saint_byte

  1. WPSalez. Собственно продажа товаров на платформе wordpress. Я заработал на этом достаточно денег. Но разработку не окупил.
  2. wgYandexFotki — это единственный раз когда меня угораздило поработать с жумлой. Вообще это патченная версия какого-то другого плагина для жумлы. Я один раз попробовал и больше не буду ибо не надо.

Вот тут больше кода и лучше: https://github.com/saintbyte

Related Posts:

 
Теги:,
formats

Загрузка файлов на android без Download Manager

Нужно для свои персональных опытов или если api level < 9

Код:

class DownloadTask extends AsyncTask<String,Integer,Integer>
{
@Override
protected void onPreExecute() {
super.onPreExecute();
debug1(«DownloadTask onPreExecute»);
}

@SuppressLint(«Wakelock»)
@Override
protected Integer doInBackground(String… params) {
debug1(«DownloadTask doInBackground»);
String urlstring = «http://abooks.ural.im/static/mp3/01.mp3″;
// TODO Auto-generated method stub
PowerManager pm = (PowerManager) MainActivity.this.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getClass().getName());
wl.acquire();
debug1(«DownloadTask before try1″);
try {
URL url = new URL(urlstring);
HttpURLConnection connection;
try {
connection = (HttpURLConnection) url.openConnection();
connection.connect();
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK)
{
debug1(«DownloadTask Server returned HTTP » + connection.getResponseCode() + » » + connection.getResponseMessage());
return null;

}
debug1(«DownloadTask after try 1″);
int fileLength = connection.getContentLength();
debug1(«DownloadTask fileLength»+Integer.toString(fileLength));
InputStream input = connection.getInputStream();

FileOutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory().getPath() + «/1.mp3″);
byte data[] = new byte[4096];
long total = 0;
int count;
while ((count = input.read(data)) != -1) {
// allow canceling with back button
if (isCancelled())
return null;
total += count;
// publishing the progress….
if (fileLength > 0) // only if total length is known
debug1(«DownloadTask fileLength ready»+Integer.toString((int) (total * 100 / fileLength)));
publishProgress((int) (total * 100 / fileLength));
output.write(data, 0, count);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

// expect HTTP 200 OK, so we don’t mistakenly save error report
// instead of the file

} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
wl.release();
}
return null;
}
@Override
protected void onProgressUpdate(Integer… values) {
super.onProgressUpdate(values);
tw.setText(Integer.toString(values[0]));
}

@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
}

}

Запускается так:

new DownloadTask().execute( "http://xxxx.ru/static/mp3/01.mp3");

Разрешения примерно такие:

 <uses-permission android:name="android.permission.INTERNET"/>
 <uses-permission android:name="android.permission.WAKE_LOCK" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Related Posts:

 
Теги:,
formats

Django upload_to

есть указать в upload_to в imageField/FileField начинающийся с / (типа полный путь) то будет ошибка 400 bad request. И пойми что это такое … все ведет в django db model base и там _Save_table. И там если добавить на строку тру except — то будет такое исключение: .
Лечиться все только указание относительного пути.

Related Posts:

 
Теги:
formats

Запуск django проекта с gunicorn

Я кручу джангу без всяких там апачей — просто проксирую через nginx. Это очень удобно если надо запустить например отладочный сервер и что-то по быстрому отладить а с гитом работать в лом.

gunicorn_django -b 127.0.0.1:5741 --daemon --pid sg.pid

Будет ругаться что устаревший способ, но будет работать. На производительность ихмо влияет не сильно — узким местом в скорости отдачи получается nginx

Related Posts:

  • No Related Posts
 
formats

Закрывается Pays.io

Вот такое письмо я получил сегодня:

Добрый день ,настоящим уведомляем Вас о закрытии сервиса Pays.io.
Сервис проработает еще неделю. Не зависимо от закрытия сервиса, все обязательства по выплатам вам принятых через нас денег будут выполнены конечным процессингом, к которому вас подключали(у вас с ним договор).
Для продолжения работы и по вопросам поддержки Вам необходимо обратиться к менеджеру в фирме Платрон (наш партнер через которого мы производили подключения).
Контакты менедера: e.lysova@platron.ru +7 495 983 3279
Благодарим Вас за то, что Вы все это время были с нами.

Related Posts:

  • No Related Posts
 
Теги:
formats

Качаем пока не кончиться место

Вот такой скрипт на баше:

#!/bin/bash
set +xue
start=367770
start=`cat cnt`
#for i in {$start..400000}
#do
for (( i=$start; i<=400000; i++ ))
do
 echo $i > cnt 
 wget "http://odnoklassniki.ru/profile/?${i}"
 sleep 1
 DF_P=`df -lk / | grep -v devfs | grep -v none | grep -v "Использовано" | awk '{print $5}'`
 echo $DF_P
 if [[ $DF_P == "90%" ]];
 then
 exit 0
 fi
done

Related Posts:

 
Теги:,
formats

Android как Linux — сборка бинарика под андроид

apt-get install gcc-arm-linux-gnueabi
arm-linux-gnueabi-gcc -static -march=armv7 test.c -o test

Related Posts:

 
Теги:, ,
WPSALEZ
Единственный плагин под WordPress который работает с a1pay

Покупай

Switch to our mobile site