sql >> データベース >  >> RDS >> Mysql

Android-JSONmySQLクエリはNetworkOnMainThreadExceptionを与えます

    ICS以降、UI(メイン)スレッドでのネットワーク操作は禁止されていると聞きました。したがって、この操作は別のスレッドで実行する必要があります。したがって、 AsyncTaskを使用してください 、スレッド またはHandlerThread with Looper and Handler Web操作を実行します。フローズンヨーグルトまたはジンジャーブレッドを実行しているデバイスで試してみると、問題はありませんが、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. Yiiで日付をNULLに設定するにはどうすればよいですか?

    2. MysqlでBETWEEN句を使用して英数字フィールドを使用するにはどうすればよいですか?

    3. MYSQL:同じテーブルを2回参照する同じクエリで2つのテーブルを結合する方法

    4. SQLServer-Windows認証で接続します