Mysql
 sql >> база данни >  >> RDS >> Mysql

Android - JSON mySQL заявката дава NetworkOnMainThreadException

Чух, че като се започне от ICS, не е разрешено да се извършват мрежови операции върху UI (основна) нишка. Следователно трябва да изпълните тази операция в отделна нишка. Така че или използвайте AsyncTask , Нишка или HandlerThread с Looper и Handler за извършване на уеб операция. Ако го опитате на устройство, работещо с froyo или gingerbread, ще бъде добре, но не и на ICS.

По отношение на опита ви да го стартирате чрез манипулатор или AsyncTask, зависи от това как сте го направили. Поставете този код, за да видя проблема.

Актуализиране

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();
        }
    }

}

*Имаше някои проблеми с извикването на метода и най-важното беше, че извличахте ключове от JSONObject като Idfriend, Id1, Id2 което е погрешно, защото във вашия json низ ключовете са като idfriend, id1, id2 . Регистърът й е чувствителен, затова се срива.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Заявка за регулярни изрази в хибернация

  2. Какъв е най-добрият начин да съхранявате библията в SQL?

  3. За да използвате BatchConfigurer по подразбиране, контекстът трябва да съдържа не повече от един източник на данни, намерен 2

  4. mysql изберете най-ниската цена от multi select

  5. Списък на MySQL спецификаторите за формат на дата