Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Android - Truy vấn mySQL JSON cung cấp cho NetworkOnMainThreadException

Tôi nghe nói rằng bắt đầu từ ICS, nó không được phép thực hiện các hoạt động mạng trên luồng giao diện người dùng (main). Do đó, bạn phải thực hiện thao tác này trong một luồng riêng biệt. Vì vậy, hãy sử dụng AsyncTask , Chủ đề hoặc HandlerThread với Looper và Handler để thực hiện hoạt động web. Nếu bạn thử nó trên thiết bị chạy froyo hoặc bánh gừng, nó sẽ ổn nhưng trên ICS thì không.

Về nỗ lực của bạn để chạy nó thông qua trình xử lý hoặc AsyncTask, điều đó phụ thuộc vào cách bạn đã thực hiện. Dán mã đó để tôi thấy sự cố.

Cập nhật

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

}

* Có một số vấn đề khi gọi phương thức và điều quan trọng nhất là bạn đang tìm nạp các khóa từ JSONObject dưới dạng Idfriend, Id1, Id2 điều này sai vì trong chuỗi json của bạn, các khóa giống như idfriend, id1, id2 . Phân biệt chữ hoa chữ thường, đó là lý do tại sao nó bị lỗi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nodejs Cluster với các kết nối MySQL

  2. Sử dụng đầu nối với Kafka / Confluent được Helm cài đặt

  3. Tìm nạp mảng chức năng nhân đôi giá trị ở mỗi vị trí của mảng?

  4. Lưu trữ các bản ghi cơ sở dữ liệu vào mảng

  5. mysql - CẬP NHẬT hàng dựa trên các hàng khác