我的应用程序确实连接到了我的PC(xampp)上的本地服务器,并且我想实现asynctask以避免服务器不在线或出现任何其他问题时应用程序崩溃或阻塞。在网上阅读时,我发现最好的解决方案应该是asynctask,但是我真的不太了解如何实现它。
我有一个连接到服务器的JSONParser类,然后是另一个具有多个函数的userfunctions类,这些函数调用JSONParser类...我应该在JSONParser类还是另一个类上实现asynctask?
这是我的JSONParser类:
public class JSONParser{
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
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();
Log.e("JSON", json);
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
我的班级应该如何与asynctask和重写doinbackground方法一起使用?
那么我应该如何调用它才能执行getjsonfromurl方法?
例如,当我现在需要解析JSON时,我只需编写
jsonParser = new JSONParser();
JSONObject json = jsonParser.getJSONFromUrl(URL, params);
您还能解释何时使用asynctask更好以及何时使用多线程吗?
编辑:我添加了我的UserFunctions类,以便您可以在我的代码上提供一个真实的示例,因为我仍然不知道如何处理所有问题。
public class UserFunctions{
private JSONParser jsonParser;
// Testing in localhost using xampp
// use http://10.0.2.2/ to connect to your localhost ie http://localhost/
private static String URL = "http://192.168.1.102/android_login_api/"; //"http://192.168.1.102/android_login_api/"
private static String login_tag = "login";
private static String register_tag = "register";
private static String new_reservation_tag = "reservation";
private static String get_reservation_tag = "get_reservation";
// constructor
public UserFunctions(){
jsonParser = new JSONParser();
}
/**
* function make Login Request
* @param email
* @param password
* */
public JSONObject loginUser(String email, String password){
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", login_tag));
params.add(new BasicNameValuePair("email", email));
params.add(new BasicNameValuePair("password", password));
JSONObject json = jsonParser.getJSONFromUrl(URL, params);
//Log.e("JSON", json.toString());
return json;
}
/**
* function make Registration Request
* @param name
* @param email
* @param password
* */
public JSONObject registerUser(String name, String email, String password){
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", register_tag));
params.add(new BasicNameValuePair("name", name));
params.add(new BasicNameValuePair("email", email));
params.add(new BasicNameValuePair("password", password));
// getting JSON Object
JSONObject json = jsonParser.getJSONFromUrl(URL, params);
// return json
return json;
}
/**
* function make new Reservation
* @param email
* @param attivita
* @param data
* @param ora
* */
public JSONObject newReservation(String email, String attivita, String data, String ora){
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
//String data_string = data.toString();
params.add(new BasicNameValuePair("tag", new_reservation_tag));
params.add(new BasicNameValuePair("email", email));
params.add(new BasicNameValuePair("attivita", attivita));
params.add(new BasicNameValuePair("data", data));
params.add(new BasicNameValuePair("ora", ora));
JSONObject json = jsonParser.getJSONFromUrl(URL, params);
//Log.e("JSON", json.toString());
return json;
}
/**
* function get Reservation
* @param email
* */
public JSONObject getReservation(String email){
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
//String data_string = data.toString();
params.add(new BasicNameValuePair("tag", get_reservation_tag));
params.add(new BasicNameValuePair("email", email));
JSONObject json = jsonParser.getJSONFromUrl(URL, params);
//Log.e("JSON", json.toString());
return json;
}
/**
* function get Reservation number
* @param email
* */
public int getReservationNum(String email){
JSONObject json = getReservation(email);
JSONArray jsona = null;
int rn = 0;
try {
jsona = json.getJSONArray("reservation");
if(jsona.length() > 0){
rn = jsona.length();
return rn;
}
} catch (JSONException e) {
e.printStackTrace();
}
return rn;
}
最佳答案
如果您确实有时间学习一种新方法,也许您可以阅读有关Volley的官方培训课程,Volley是一个Google图书馆,旨在缓解您的Web请求,特别是在请求JSON响应或下载图像时。您可以在这里找到它:http://developer.android.com/training/volley/index.html