Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Отправка запроса на сервер - получение ответа в xml и обработка - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android tabhost http://www.cyberforum.ru/android-dev/thread1073945.html
всем привет много искал но всё таки не нашёл мне нужно что бы вкладки были с лева 5 штук , но что то найти не могу как сделать их слева даже когда кидаю просто табхост то сразу ошибки в xml ...
Программирование Android Программирование на андроид Как научиться программировать на андроид, сначала изучить Java или можно сразу приступить к изучению на андроиде к примеру на этом сайте http://developer.alexanderklimov.ru/android/index.php http://www.cyberforum.ru/android-dev/thread1073791.html
Программирование Android Как использовать TextView?
Здрасте. Прошу прощение за нубский вопрос, как использовать TextViev? То есть, к примеру в main.xml есть TextViev android:id="@+id/textView1" android:layout_width="wrap_content" ...
не работает onTouchEvent Программирование Android
Создаю игру - арканоид, не распознает прикосновения... Как можно это сделать, сильно не изменяя код? public class MainThread extends Thread{ private GameView gameView; private int width;...
Программирование Android Работа с drop down navigation в action bar http://www.cyberforum.ru/android-dev/thread1073634.html
Добрый день! Использую drop down navigation. public class MainActivity extends Activity implements ActionBar.OnNavigationListener { String data = new String { "one", "two", "three" };...
Программирование Android Почему в EditText не работает html тэг <strike>? Добрый вечер, Почему не работает конструкция: Spanned s= Html.fromHtml("<strike>my test text</strike>"); editText.setText(s); <b>,<i> работают, а strike нет! ( подробнее

Показать сообщение отдельно
YuraAAA
1574 / 1316 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
18.01.2014, 16:39
Kazachek, нет ничего проще! часть 1)
Создаём файл приложение. Это будет наш файл глобальных утилит.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class TheApplication extends Application {
 
    private static TheApplication instance;
    public static final String TEMP_FOLDER = "temp";
 
    public static TheApplication getInstance() {
        return instance;
    }
 
    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }
 
    public static String getStorageDir() {
        File dir = instance.getCacheDir();
        String storageDirPath = dir.getAbsolutePath() + "/";
        if (!dir.exists()) dir.mkdirs();
        requestFilePermission(dir.getAbsolutePath());
 
        dir = new File(storageDirPath + TEMP_FOLDER);
        if (!dir.exists()) dir.mkdirs();
        requestFilePermission(dir.getAbsolutePath());
 
        dir = new File(storageDirPath + TEMP_FOLDER);
        if (!dir.exists()) dir.mkdirs();
        requestFilePermission(dir.getAbsolutePath());
        return storageDirPath;
    }
 
    public static void requestFilePermission(String filePath) {
        if (filePath != null && !filePath.trim().isEmpty()) {
            try {
                Runtime.getRuntime().exec("chmod 755 " + filePath);
            } catch (IOException e) {
                Log.e("Utils.getStorageDir", e.getMessage(), e);
            }
        }
    }
}
И не забываем добавить в манифест чтобы этот файл стал действительно Application-файлом.
Java
1
2
    <application android:label="@string/app_name"
                 android:name="TheApplication">
Отлично, теперь у нас есть кэш-директория.

Опишем интерфейс обратного вызова:
Java
1
2
3
4
5
6
7
public interface IDownloadCallback {
 
    void onSuccess(String filePath);
 
    void onFailure(Throwable reason);
 
}
Далее нам нужно скачать файл. Будем отталкиваться от того, что сервер шлёт нам бинарный контент.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import android.os.AsyncTask;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
 
 
public class DownloadWorker extends AsyncTask<Void, Void, String> {
 
    private IDownloadCallback downloadCallback; //callback
    private String url;
    public static final String FILE_NAME = "your_file.xml"; //filename
    private Throwable error; //Error flag
    private boolean deleteIfExists;
 
    public DownloadWorker(String url, boolean deleteIfExists, IDownloadCallback downloadCallback) {
        this.downloadCallback = downloadCallback;
        this.url = url;
        this.deleteIfExists = deleteIfExists;
    }
 
    public DownloadWorker(String url, IDownloadCallback downloadCallback) {
        this(url, false, downloadCallback);
    }
 
    @Override
    protected String doInBackground(Void... voids) {
        String filePath = TheApplication.getStorageDir() + FILE_NAME;
        File file = new File(filePath);
        if (file.exists()) {             //Существует ли файл?
            if (deleteIfExists) { //Если существует и надо удалить - трём
                file.delete();
            } else {
                return filePath; //Иначе возвращаем файловый путь
            }
        }
        //Качаем файл
        try {
            URL u = new URL(url);
            HttpURLConnection c = (HttpURLConnection) u.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);
            c.connect();
            FileOutputStream f = new FileOutputStream(file);
            InputStream in = c.getInputStream();
 
            byte[] buffer = new byte[1024];
            int len1 = 0;
            while ( (len1 = in.read(buffer)) > 0 ) {
                f.write(buffer,0, len1);
            }
            f.close();
        } catch (IOException e) {
            e.printStackTrace();
            error = e;
            return null;
        }
        return filePath;
    }
 
    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        if (downloadCallback == null) return;
        if (s != null) {
            downloadCallback.onSuccess(s);
            return;
        }
        if (error != null) {
            downloadCallback.onFailure(error);
            return;
        }
        throw new IllegalStateException("Some error was occurred. We don't have entity and error?");
    }
}
Собственно, всё. Вызываем воркер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class MyActivity extends Activity {
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        new DownloadWorker("your_url", true, new IDownloadCallback() {
            @Override
            public void onSuccess(String filePath) {
                Log.d(MyActivity.class.getSimpleName(), "Success: " + filePath);
            }
 
            @Override
            public void onFailure(Throwable reason) {
                Log.d(MyActivity.class.getSimpleName(), "Error: " + reason);
            }
        });
    }
 
}
Проверяйте. Если работает и скачивает файл (его можно посмотреть на эмуляторе через DDMS, так как на телефоне не всегда есть доступ к кэш-папке), приступим к следующему шагу: xml parser.

Добавлено через 2 минуты
Java
1
requestFilePermission
метод, меняющий доступ к файлу. Иногда на 2.3.x android пропадает доступ к кэшу.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru