sql >> Database teknologi >  >> RDS >> Mysql

Android - JSON mySQL-forespørgsel giver NetworkOnMainThreadException

Jeg hørte, at fra ICS er det ikke tilladt at udføre netværksoperationer på UI (hoved) tråd. Derfor skal du udføre denne operation i en separat tråd. Så brug enten AsyncTask , Tråd eller HandlerThread med Looper og Handler at udføre weboperation. Hvis du prøver det på en enhed, der kører froyo eller honningkager, ville det være fint, men ikke på ICS.

Med hensyn til dit forsøg på at køre det via handler eller AsyncTask, afhænger det af, hvordan du gjorde det. Indsæt den kode, så jeg kan se problemet.

Opdater

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

}

*Der var nogle metodekaldsproblemer, og det vigtigste var, at du hentede nøgler fra JSONObject som Idfriend, Id1, Id2 hvilket er forkert, fordi nøglerne i din json-streng er som idfriend, id1, id2 . Den skelner mellem store og små bogstaver, det er derfor, den styrtede ned.



  1. MySQL-problem:LEFT JOIN på tomt bord

  2. php-advarsel, når du logger på webstedsmappen af ​​cpanel

  3. Sådan opretter du en MySQL-database og indstiller privilegier

  4. hvordan man søger SQL Server 2008 R2 lagrede procedurer for en streng?