2015-07-09 3 views
1

Мне нужно прочитать ответное сообщение, полученное после подключения к онлайн-скрипту PHP. Этот скрипт возвращает следующее:Чтение результата запроса HTTP в Android

{"success":1,"innerResult":[{"username":"raafat","password":"123"}]} 

Мне просто нужно прочитать значение успеха из этого сообщения. Я попробовал запрос HTTP:

private class GetPersonDetails extends AsyncTask<String, String, String> { 
     //Activity act; 
     Context mContext; 

     ProgressDialog progressDialog; 

     @Override 
     /* 
     public void onPreExecute() { 

      progressDialog = new ProgressDialog(mContext); 
      progressDialog.setMessage("Signing in..."); 
      progressDialog.show(); 
     } 
*/ 

     protected String doInBackground(String... params) { 
      // updating UI from Background Thread 

      // Check for success tag 

      try { 
       success = 3; 
       List<NameValuePair> paramss = new ArrayList<NameValuePair>(); 
       success = 4; 
       paramss.add(new BasicNameValuePair("username",n.getText().toString())); 
       paramss.add(new BasicNameValuePair("password",p.getText().toString())); 
       success = 5; 
       JSONObject json = jsonParser.makeHttpRequest("akmiengineering.com/insurance-app/search_username.php", "GET", paramss); 
       success = 6; 

       // json success tag 
       success = json.getInt("success"); 
        Toast.makeText(getApplicationContext(),"success is" + success, Toast.LENGTH_LONG).show(); 

       if (success == 1) { 
        // onPostExecute(); 
....... 





     } else { 

....... 
        } 
       } catch (Exception e) { 
        // Toast.makeText(getApplicationContext(), "error", Toast.LENGTH_LONG).show(); 
        e.printStackTrace(); 
       } 

       return null; 
      } 

Код останавливается здесь:

 JSONObject json = jsonParser.makeHttpRequest("akmiengineering.com/insurance-app/search_username.php", "GET", paramss); 

и значение успеха 5. Я не мог обнаружить, что вызывает проблемы, поэтому я попытался с помощью URL-соединения вместо:

URL url; 
     HttpURLConnection urlConnection = null; 
     try { 
      url = new URL("http://akmiengineering.com/insurance-app/search_username.php?username=adla&password=123"); 

      urlConnection = (HttpURLConnection) url.openConnection(); 

      InputStream in = urlConnection.getInputStream(); 

      InputStreamReader isw = new InputStreamReader(in); 

      int data = isw.read(); 
      while (data != -1) { 
       char current = (char) data; 
       data = isw.read(); 
       System.out.print(current); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       urlConnection.disconnect(); 
      } catch (Exception e) { 
       e.printStackTrace(); //If you want further info on failure... 
      } 

Но и мой код останавливается здесь:

InputStream in = urlConnection.getInputStream(); 

Я не знаю, что я делаю неправильно. Пожалуйста, помогите мне.

UPDATE:

Это LogCat:

07-09 14:03:58.221 9554-9610/system_process E/InputDispatcher﹕ Motion event has invalid pointer count 0; value must be between 1 and 16. 
07-09 14:03:58.321 9554-9610/system_process E/InputDispatcher﹕ Motion event has invalid pointer count 0; value must be between 1 and 16. 
07-09 14:03:58.321  598-1749/? D/audio_hw_primary﹕ found out /dev/snd/pcmC0D0p 
07-09 14:03:58.381  598-1749/? W/audio_hw_primary﹕ out_write() limiting sleep time 102539 to 46439 
07-09 14:03:58.451  598-1749/? W/audio_hw_primary﹕ out_write() limiting sleep time 65759 to 46439 
07-09 14:04:03.831 9750-10534/com.bluestacks.bstfolder D/dalvikvm﹕ GC_FOR_ALLOC freed 711K, 25% free 2688K/3576K, paused 0ms, total 0ms 
07-09 14:04:09.951 9783-9911/com.bluestacks.gamepophome D/[InMobi]-[Analytics]-4.5.3﹕ NetworkManager->handleMessag: msg:{ when=-40ms what=1001 target=android.os.Handler } 
07-09 14:04:18.291  591-1700/? D/MDnsDS﹕ MDnsSdListener::Monitor poll timed out 
07-09 14:04:18.291  591-1700/? D/MDnsDS﹕ Going to poll with pollCount 1 
07-09 14:04:19.581 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ android.os.NetworkOnMainThreadException 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145) 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at java.net.InetAddress.getAllByName(InetAddress.java:214) 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28) 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216) 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122) 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292) 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255) 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206) 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345) 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296) 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179) 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at com.example.adla.insurancemobileapplication.MainActivity.yalaconnect(MainActivity.java:187) 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method) 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515) 
07-09 14:04:19.591 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at android.view.View$1.onClick(View.java:3823) 
07-09 14:04:19.601 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at android.view.View.performClick(View.java:4443) 
07-09 14:04:19.601 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at android.view.View$PerformClick.run(View.java:18433) 
07-09 14:04:19.601 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:733) 
07-09 14:04:19.601 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95) 
07-09 14:04:19.601 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at android.os.Looper.loop(Looper.java:136) 
07-09 14:04:19.601 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5021) 
07-09 14:04:19.601 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method) 
07-09 14:04:19.601 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515) 
07-09 14:04:19.601 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827) 
07-09 14:04:19.601 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643) 
07-09 14:04:19.601 12243-12243/com.example.adla.insurancemobileapplication W/System.err﹕ at dalvik.system.NativeStart.main(Native Method) 
07-09 14:04:19.601 12243-12243/com.example.adla.insurancemobileapplication I/Choreographer﹕ Skipped 1275 frames! The application may be doing too much work on its main thread. 
07-09 14:04:58.951 9750-10534/com.bluestacks.bstfolder D/dalvikvm﹕ GC_FOR_ALLOC freed 729K, 25% free 2687K/3576K, paused 0ms, total 0ms 
+0

Кажется, что вы не можете подключиться к устройству. Вы получаете исключение? У вас есть [разрешения на доступ в Интернет] (http://developer.android.com/reference/android/Manifest.permission.html#INTERNET)? – Kariem

+0

Нет никакого исключения, и у меня есть разрешения, установленные в файле манифеста. –

+0

Вам нужно прочитать результат в методе 'onPostExecute'' AsyncTask', который я не вижу, что вы создали в своем сообщении. Возможно, эта [ссылка] (http://stackoverflow.com/questions/31309781/httpurlconnection-unable-to-connect-to-url-in-android/31311135#31311135) может помочь вам лучше понять «AsyncTask». – ChuongPham

ответ

1

Попробуйте создать новый проект, чтобы проверить свой код для соединения с URL, потому что я проверил ваш код и он работает.

+0

Это сработало, спасибо u soo much !! –

0

URL, кажется, нормально. Возможно, вам потребуется установить HTTP-прокси для подключения. Если вы отлаживаете устройство и все остальное работает, это странно. Если вы используете эмулятор, попробуйте изменить параметры следующих ответов на this question:

  • Настройка параметров беспроводной сети на эмуляторе после запуска его
  • Установите параметр --http-proxy при запуске эмулятора (ref, see section Network)
  • Настройка прокси-сервера в клиенте HTTP: Я не думаю, что их makeHttpRequest метод поддерживает, но вы можете использовать java.net.Proxy с вашим HttpURLConnection, как описано here
+0

Спасибо, я попробую. –

0

В вашем первом подходе я считаю, что проблема заключается в том, что вы делаете запрос Http без какого-либо Http-клиента.

Посмотрите на this или this и да, я знаю, что API устарел. У вас должен быть HttpClient и HttpResponse. На мой взгляд, устаревший способ легче понять, когда вы новичок в этом вопросе.

 Смежные вопросы

  • Нет связанных вопросов^_^