Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Android — zapytanie JSON mySQL daje wyjątek NetworkOnMainThreadException

Słyszałem, że począwszy od ICS nie wolno wykonywać operacji sieciowych na wątku UI (głównym). Dlatego musisz wykonać tę operację w osobnym wątku. Więc albo użyj AsyncTask , Wątek lub HandlerThread z Looperem i Handlerem do wykonywania operacji internetowych. Jeśli wypróbujesz go na urządzeniu z froyo lub piernikiem, będzie dobrze, ale nie na ICS.

Jeśli chodzi o próbę uruchomienia go za pomocą programu obsługi lub AsyncTask, zależy to od tego, jak to zrobiłeś. Wklej ten kod, aby zobaczyć problem.

Aktualizacja

public class MySQLAndroidActivity extends ListActivity {

    private static final String url = "http://X.X.X.X/test.php";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity2);

        LoadTask t = new LoadTask();
        t.execute(null);

    }

    private static class LoadTask extends AsyncTask<Void, Void, Void> {
        @Override
        protected void onPreExecute() {

        }

        @Override
        protected Void doInBackground(Void... params) {
            doStuff();

            return null;
        }
    }





    public static void doStuff() {
        JSONArray jArray;
        String result = null;
        InputStream is = null;
        StringBuilder sb = null;
        HttpResponse response;
        HttpEntity entity;

        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        // http post
        try {
            HttpClient httpclient = new DefaultHttpClient();

            HttpPost httppost = new HttpPost(url);

            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            response = httpclient.execute(httppost);

            entity = response.getEntity();

            is = entity.getContent();

        } catch (Exception e) {
            Log.e("log_tag", "Error in http connection" + e.toString());
            System.exit(1);
        }

        // convert response to string
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
            sb = new StringBuilder();
            sb.append(reader.readLine() + "\n");

            String line;
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
            is.close();
            result = sb.toString();

            Log.i("json string", result);
        } catch (Exception e) {
            Log.e("log_tag", "Error converting result " + e.toString());
        }


        // parsing data
        String idfriend;
        String id1;
        String id2;
        try {
            jArray = new JSONArray(result);
            JSONObject json_data = null;

            System.out.println("Length " + jArray.length());
            Log.d("DB", "Length " + jArray.length());

            for (int i = 0; i < jArray.length(); i++) {

                System.out.println("counter " + i);
                json_data = jArray.getJSONObject(i);
                idfriend = json_data.getString("idfriend");
                id1 = json_data.getString("id1");
                id2 = json_data.getString("id2");

                System.out.println("id1: " + id1);
            }
        } catch (JSONException e1) {
            Log.d("DB", "Error somewhere");
        } catch (ParseException e1) {
            e1.printStackTrace();
        }
    }

}

* Wystąpiły pewne problemy z wywoływaniem metod, a najważniejsze było to, że pobierałeś klucze z JSONObject jako Idfriend, Id1, Id2 co jest błędne, ponieważ w ciągu json klucze są takie jak idfriend, id1, id2 . Wielkość liter jest rozróżniana, dlatego się zawieszał.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak pogrupować według kolejności DESC

  2. Pole listy wielokrotnego wyboru stanu nie wyświetla wszystkich miast w innym polu listy (Php,mysql,ajax)

  3. Zamień jedną długą kolumnę tabeli w tabelę z wieloma kolumnami

  4. Sprawdź, czy wiersz istnieje w bazie danych przed wstawieniem

  5. SQLSTATE[23000]:Naruszenie ograniczenia integralności:1217