FATAL EXCEPTION: AsyncTask #1 что то в jsonparser

436
05 июня 2017, 23:08

Пытаюсь переделать под себя проект как работать с mysql в android. Все переписал под себя, но выходить данная ошибка

06-03 13:03:49.880 10844-10884/com.example.andrey.projectudsu 
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.example.andrey.projectudsu, PID: 10844
java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:300)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:848)
Caused by: java.lang.NoSuchMethodError: org.apache.http.impl.client.DefaultHttpClient.execute
        at parser.JSONParser.makeHttpRequest(JSONParser.java:53)
        at com.example.andrey.projectudsu.RatingActivity$LoadAllAbiturients.doInBackground(RatingActivity.java:98)
        at com.example.andrey.projectudsu.RatingActivity$LoadAllAbiturients.doInBackground(RatingActivity.java:75)
        at android.os.AsyncTask$2.call(AsyncTask.java:288)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
        at java.lang.Thread.run(Thread.java:848)

mainactivity

package com.example.andrey.projectudsu;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button ratingBtn;
Button addAbiturBtn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ratingBtn = (Button) findViewById(R.id.ratingBtn);
    addAbiturBtn = (Button) findViewById(R.id.addAbiturBtn);
}
public void rating(View v) {
    Intent intent = new Intent(getApplicationContext(), RatingActivity.class);
    startActivity(intent);
}
public void addAbitur(View v) {
    Intent intent = new Intent(getApplicationContext(), AddAbiturActivity.class);
    startActivity(intent);
}
}

addabituractivity

package com.example.andrey.projectudsu;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.example.andrey.projectudsu.R;
import parser.JSONParser;
import org.apache.http.*;
import org.apache.http.message.*;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class AddAbiturActivity extends Activity {
private ProgressDialog pDialog;
JSONParser jsonParser = new JSONParser();
EditText ETlastname;
EditText ETfirstname;
EditText ETpatronymic;
EditText ETege_points;
String lastname = ETlastname.getText().toString();
String firstname = ETfirstname.getText().toString();
String patronymic = ETpatronymic.getText().toString();
String ege_points = ETege_points.getText().toString();
private static String url_add_abiturient = "http://192.168.43.224/add_abiturient.php";
private static final String TAG_SUCCESS = "success";
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_abitur);
    ETlastname = (EditText) findViewById(R.id.lastName);
    ETfirstname = (EditText) findViewById(R.id.firstname);
    ETpatronymic = (EditText) findViewById(R.id.patronymic);
    ETege_points = (EditText) findViewById(R.id.ege_points);
    Button addIntoBtn = (Button) findViewById(R.id.addIntoBDBtn);
    addIntoBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            new addNewAbiturient().execute();
        }
    });
}
/**
 * Фоновый Async Task создания нового продукта
 **/
class addNewAbiturient extends AsyncTask<String, String, String> {
    /**
     * Перед согданием в фоновом потоке показываем прогресс диалог
     **/
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(AddAbiturActivity.this);
        pDialog.setMessage ("Добавление абитуриента...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }
    /**
     * Добавление абитуриента
     **/
    protected String doInBackground(String[] args) {

        // Заполняем параметры
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("lastname", lastname));
        params.add(new BasicNameValuePair("firstname", firstname));
        params.add(new BasicNameValuePair("patronymic", patronymic));
        params.add(new BasicNameValuePair("ege_points", ege_points));
        // получаем JSON объект
        JSONObject json = jsonParser.makeHttpRequest(url_add_abiturient, "POST", params);
        Log.d("Create Response", json.toString());
        try {
            int success = json.getInt(TAG_SUCCESS);
            if (success == 1) {
                // абитуриент успешно добавлен создан
                Intent i = new Intent(getApplicationContext(), RatingActivity.class);
                startActivity(i);
                // закрываем это окно
                finish();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * После оконачния скрываем прогресс диалог
     **/
    protected void onPostExecute(String file_url) {
        pDialog.dismiss();
    }
}
}

ratingactivity

package com.example.andrey.projectudsu;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import parser.JSONParser;
import org.apache.http.*;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class RatingActivity extends ListActivity {
private ProgressDialog pDialog;
// Создаем JSON парсер
JSONParser jParser = new JSONParser();
ArrayList<HashMap<String, String>> abiturientsList;
// url получения списка всех продуктов
private static String url_all_abiturients = "http://192.168.43.224/get_all_abiturients.php";
// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_ABITURIENTS = "abiturients";
private static final String TAG_ID_ABITURIENT = "abiturient";
private static final String TAG_LASTNAME = "lastname";
private static final String TAG_FIRSTNAME = "firstname";
private static final String TAG_EGE_POINTS = "ege_points";
// тут будет хранится список продуктов
JSONArray abiturients = null;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_rating);
    // Hashmap for ListView
   abiturientsList = new ArrayList<HashMap<String, String>>();
    // Загружаем список в фоновом потоке
    new LoadAllAbiturients().execute();
    // получаем ListView
    ListView lv = getListView();

}


/**
 * Фоновый Async Task для загрузки всех продуктов по HTTP запросу
 * */
class LoadAllAbiturients extends AsyncTask<String, String, String> {
    /**
     * Перед началом фонового потока Show Progress Dialog
     * */
    /*@Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(RatingActivity.this);
        pDialog.setMessage("Загрузка списка. Подождите...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }*/
    /**
     * Получаем список абитуриентов из url
     * */
    protected String doInBackground(String... args) {
        // Будет хранить параметры
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        // получаем JSON строк с URL
        JSONObject json = jParser. makeHttpRequest(url_all_abiturients, "GET",params);
        Log.d("All abiturients: ", json.toString());
        try {
            // Получаем SUCCESS тег для проверки статуса ответа сервера
            int success = json.getInt(TAG_SUCCESS);
            if (success == 1) {
                // абитуриент найден
                // Получаем масив из Абитуриентов
                abiturients = json.getJSONArray(TAG_ABITURIENTS);
                // перебор всех продуктов
                for (int i = 0; i < abiturients.length(); i++) {
                    JSONObject c = abiturients.getJSONObject(i);
                    // Сохраняем каждый json елемент в переменную
                    String id_abiturient = c.getString(TAG_ID_ABITURIENT);
                    String lastname = c.getString(TAG_LASTNAME);
                    String firstname = c.getString(TAG_FIRSTNAME);
                    String ege_points = c.getString(TAG_EGE_POINTS);
                    // Создаем новый HashMap
                    HashMap<String, String> map = new HashMap<String, String>();
                    // добавляем каждый елемент в HashMap ключ => значение
                    map.put(TAG_ID_ABITURIENT, id_abiturient);
                    map.put(TAG_LASTNAME, lastname);
                    map.put(TAG_FIRSTNAME, firstname);
                    map.put(TAG_EGE_POINTS, ege_points);
                    // добавляем HashList в ArrayList
                    abiturientsList.add(map);
                }
            } else {
                // абитуриент не найден
                // Запускаем AddAbiturActivity
                Intent i = new Intent(getApplicationContext(),
                        AddAbiturActivity.class);
                // Закрытие всех предыдущие activities
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(i);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * После завершения фоновой задачи закрываем прогрес диалог
     * **/
    protected void onPostExecute(String file_url) {
        // закрываем прогресс диалог после получение все продуктов
        //pDialog.dismiss();
        // обновляем UI форму в фоновом потоке
        runOnUiThread(new Runnable() {
            public void run() {
                /**
                 * Обновляем распарсенные JSON данные в ListView
                 * */
                ListAdapter adapter = new SimpleAdapter(
                        RatingActivity.this, abiturientsList,
                        R.layout.activity_rating, new String[] { TAG_ID_ABITURIENT,
                        TAG_LASTNAME, TAG_FIRSTNAME, TAG_EGE_POINTS},
                        new int[] { R.id.id_abiturient, R.id.lname, R.id.fname, R.id.ege});
                // обновляем listview
                setListAdapter(adapter);
            }
        });
    }
}
}

jsonparser

package parser;
import android.util.Log;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.*;
import java.util.List;
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
// метод получение json объекта по url
// используя HTTP запрос и методы POST или GET
public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params) {
    // Создаем HTTP запрос
    try {
        // проверяем метод HTTP запроса
        if(method == "POST"){
            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();
        }else if(method == "GET"){
            DefaultHttpClient httpClient = new DefaultHttpClient();
            String paramString = URLEncodedUtils.format(params, "utf-8");
            url += "?" + paramString;
            HttpGet httpGet = new HttpGet(url);
            HttpResponse httpResponse = httpClient.execute(httpGet);
            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();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }
    // пытаемся распарсить строку в JSON объект
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }
    // возвращаем JSON строку
    return jObj;
}
}

Ошибка возникает после запуска обоих intent.

Answer 1

DefaultHttpClient устарел с API 22 и полностью удалён с API 23.

Android 6.0 release removes support for the Apache HTTP client. If your app is using this client and targets Android 2.3 (API level 9) or higher, use the HttpURLConnection class instead. This API is more efficient because it reduces network use through transparent compression and response caching, and minimizes power consumption.

Используйте HttpURLConnection.

READ ALSO
Как получить sql-запрос?

Как получить sql-запрос?

делаю запрос:

276
Почему не срабатывает UPDATE?

Почему не срабатывает UPDATE?

почему если передать несколько записей в строке, обновляются все записи:

544
Mysql complicated select

Mysql complicated select

Мне необходимо найти все посты (из таблицы posts) у которых отношение количества лайков (likes) к подписчикам из таблицы пользователей (userssubscribers)...

355
MySQL Выборка данных по условию

MySQL Выборка данных по условию

Здравствуйте, не получается составить корректный запросЕсть две таблицы author и book у обеих есть поле id_author

482