我的应用程序确实连接到了我的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

08-18 06:50
查看更多