Ваш первый вопрос:
Да. Всегда выполнять сетевые задачи или что-либо еще, что требует времени в фоновом режиме. Лучший способ сделать это - использовать AsyncTask
. This article объясняет AsyncTask
путь лучше, чем я могу, пойдите, прочитайте его.
Вопреки тому, что говорят по вашему вопросу, причина, по которой вы должны использовать отдельный поток, заключается не в том, что в противном случае вы получите NetworkOnMainThreadException
. Это потому, что это более эффективная практика, и потому что она гарантирует, что ваше приложение не заикается, пока оно выполняет сетевую задачу. Основная задача также обрабатывает анимации и т. Д. В вашем Activity
, поэтому выполнение любой задачи в основном потоке для X-времени означает, что приложение заикается в течение X-времени.
Ваш второй вопрос:
Нет, не нужно использовать JSON. Вы хотите направить свои запросы через скрипт на своей веб-странице (будь то PHP, Ruby, Python, что угодно), а не напрямую взаимодействовать с вашей базой данных. Таким образом, вы можете ограничить действия, которые может выполнять ваше приложение, а также действия, которые может выполнить потенциальный хакер.
Как я уже сказал, нет необходимости использовать JSON. Тем не менее, это самый распространенный способ получить информацию с вашего сервера в вашем приложении по нескольким причинам. Наиболее распространены два существа:
- Низкие накладные расходы: JSON использует очень мало «лишние» символы между вашими данными, в отличие, например, XML, который имеет длинные метки, и так далее;
- Простота использования: У Android есть инструменты JSON, встроенные для вас, чтобы использовать их, что очень удобно для вас, чтобы работать с JSON. Например, возьмем этот бит JSON:
[{'id':11,'name':'Bob'},{'id':42,'name':'Sally'}]
Чтобы разобрать это в вашем Android приложение, вы можете сделать:
public List<Person> parseJson(String jsonString) {
// Initialize the ArrayList we're gonna store the people in
List<Person> people = new ArrayList<Person>();
try {
// Convert the JSON from text (String) to a JSON Array, so we can
// more easily traverse it
JSONArray rootArray = new JSONArray(jsonString);
// loop through the prople in the JSON Array
for(int i=0; i<rootArray.length();
// Get the object at position i from the JSON Array
JSONObject workingObj = rootArray.get(i);
// Do what you have to to store the data. In this example,
// I'm using a class called 'Person' which has setters for Id and Name
Person p = new Person();
// Get all the info you need from the JSON Object. As you can see
// in the JSON snippet, we have an integer with key 'id' and a
// string with key 'name'
p.setId(workingObj.getInt("id"));
p.setName(workingObj.getString("name"));
// add the Person p to the ArrayList
people.add(p);
}
} catch (JSONException e) {
// properly handle all exceptions!
}
return people;
}
Как вы можете видеть, все синтаксический анализ делается для вас , и вам просто нужно приспособиться к структуре данных.
android не может разговаривать с mysql, и вы тоже этого не хотите - ваша база данных никогда не должна подвергаться прямой публичной сети. Android должен поговорить с PHP, а php поговорит с mysql. –
yess Я знаю это, но как насчет использования потока и класса json? – user3006788
Да, вам нужно использовать AsyncTask (Thread), иначе вы получите свойство NetworkOnMainThreadException. Посмотрите, есть ли там множество ссылок –