2015-04-06 2 views
1

То, что я пытаюсь сделать, это получить некоторые данные из HttpURLConnection вместо использования JsonObjectRequest() из библиотеки Volley.Как получить объект JSON с использованием HttpURLConnection вместо Volley?

Ниже приведен код, который я использую для захвата объекта JSON с моего сервера.

JsonObjectRequest jsonReq = new JsonObjectRequest(Method.GET,"myURL", null, new Response.Listener<JSONObject>(); 

Я попытался изменить null к JSONObject после myURL было изменено на null. Но это не сработало.

ответ

15

URL-адрес в JsonObjectRequest() не является необязательным, а параметр JSONObject используется для отправки параметров с запросом на URL-адрес.

Из документации: http://afzaln.com/volley/com/android/volley/toolbox/JsonObjectRequest.html

http://developer.android.com/training/volley/index.html

JsonObjectRequest

JsonObjectRequest (интермедиат метод общественного, Строка URL, JSONObject JSONRequest, Response.Listener слушатель, Response.ErrorListener errorListener) Создает новый запрос.

Параметры:

метод - метод HTTP использовать

URL - URL для извлечения JSON из

JSONRequest - А JSONObject на сообщение с запросом. Нуль разрешен и указывает, что параметры не будут отправлены вместе с запросом.

слушатель - слушатель, чтобы получить ответ JSON

errorListener - слушателю об ошибке или нуль игнорировать ошибки.

Использование HttpURLConnection:

http://developer.android.com/reference/java/net/HttpURLConnection.html

код будет выглядеть примерно так:

public class getData extends AsyncTask<String, String, String> { 

     HttpURLConnection urlConnection; 

     @Override 
     protected String doInBackground(String... args) { 

      StringBuilder result = new StringBuilder(); 

      try { 
       URL url = new URL("https://api.github.com/users/dmnugent80/repos"); 
       urlConnection = (HttpURLConnection) url.openConnection(); 
       InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 

       BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 

       String line; 
       while ((line = reader.readLine()) != null) { 
        result.append(line); 
       } 

      }catch(Exception e) { 
       e.printStackTrace(); 
      } 
      finally { 
       urlConnection.disconnect(); 
      } 


      return result.toString(); 
     } 

     @Override 
     protected void onPostExecute(String result) { 

      //Do something with the JSON string 

     } 

    } 
+0

так есть способ, которым я мог бы принести JSON от соединения HTTP URL вместо URL-адреса? спасибо –

+1

@AssassinShadow Просто обновил ответ с кодом. Я только что получил работу и протестировал. –

+0

У вас нет параметров для вашего URL. Можете ли вы опубликовать несколько примеров с параметрами публикации. – Tarun

1
import android.app.ProgressDialog; 
    import android.content.Context; 
    import android.os.AsyncTask; 

    import java.io.BufferedInputStream; 
    import java.io.BufferedReader; 
    import java.io.InputStream; 
    import java.io.InputStreamReader; 
    import java.net.HttpURLConnection; 
    import java.net.URL; 

    public class MyAsyncTask extends AsyncTask<URL, Void, String> { 

     private HttpURLConnection urlConnection; 
     private Context mContext; 
     private ProgressDialog mDialog; 
     private TaskListener mListener; 

     public MyAsyncTask(Context context, TaskListener listener) { 
      this.mContext = context; 
      mDialog = new ProgressDialog(mContext); 
      this.mListener = listener; 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      mDialog.setTitle(R.string.app_name); 
      mDialog.setMessage("Retrieving data..."); 
      mDialog.show(); 
     } 

     @Override 
     protected String doInBackground(URL... params) { 
      StringBuilder result = new StringBuilder(); 

      try { 
       URL url = params[0]; 
//   Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.0.0.1", 8080)); 
      urlConnection = (HttpURLConnection) url.openConnection(/*proxy*/); 
       urlConnection.setDoInput(true); 
       urlConnection.setConnectTimeout(20 * 1000); 
       urlConnection.setReadTimeout(20 * 1000); 

       if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { 

        InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
        BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 

        String line; 
        while ((line = reader.readLine()) != null) { 
         result.append(line); 
        } 
       } 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } finally { 
       urlConnection.disconnect(); 
      } 


      return result.toString(); 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      mDialog.dismiss(); 
      mListener.onTaskComplete(s); 
     } 
    } 
Смежные вопросы