2016-07-06 1 views
0

Я пытаюсь получить данные с сервера, используя этот адрес www.example.com/directory/, но это не работает ... он придумал это, что JSON не посылают никаких действий на сервер ... так что все, что я хочу, чтобы сделать URL это way-- www.example.com/directory/index.php?action=searchFood & денег = 50как сделать параметр URL в андроиде JSON

Это мой JsonFetcher.java

public class JsonFetcher extends AsyncTask<Pair<String, String>, Integer, JSONObject> { 

private JSONObject jsonObject; 
public AsyncResponse delegate = null; 

public interface AsyncResponse { 
    void processFinish(JSONObject output); 
} 

public JsonFetcher(AsyncResponse delegate) { 
    this.delegate = delegate; 
} 

@Override 
protected void onPostExecute(JSONObject jsonObject) { 
    super.onPostExecute(jsonObject); 
    delegate.processFinish(jsonObject); 
} 

@Override 
protected JSONObject doInBackground(final Pair<String, String>... params) { 

    int count = params.length; 
    URL url = null; 
    int responseCode = 0; 
    jsonObject = null; 
    try { 
     url = new URL("http://www.example.com/directory/"); 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } 
    HttpURLConnection conn = null; 
    try { 
     conn = (HttpURLConnection) url.openConnection(); 
     //conn.connect(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     conn.setRequestMethod("POST"); 
     conn.setDoInput(true); 
     conn.setDoOutput(true); 
     Uri.Builder builder = new Uri.Builder(); 
     Date date = new Date(); 
     String md5 = date.toString(); 

     //Log.e("json lock",lock); 
     //Log.e("json key",md5); 

     for (int i = 0; i < count; i++) { 
      builder.appendQueryParameter(String.valueOf(params[i].first),String.valueOf(params[i].second)); 
     } 
     String query = builder.build().getEncodedQuery(); 
     OutputStream os = conn.getOutputStream(); 
     BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); 
     writer.write(query); 
     writer.flush(); 
     writer.close(); 
     os.close(); 
    } catch (ProtocolException e) { 
     e.printStackTrace(); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    // read the response 
    try { 
     responseCode = conn.getResponseCode(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    if (responseCode == HttpsURLConnection.HTTP_OK) { 
     InputStream in = null; 
     try { 
      in = new BufferedInputStream(conn.getInputStream()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      //conn.disconnect(); 
     } 

     BufferedReader r = new BufferedReader(new InputStreamReader(in)); 
     StringBuilder total = new StringBuilder(); 
     String line; 
     try { 
      while ((line = r.readLine()) != null) { 
       total.append(line); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     Log.e("json", total.toString()); 
     try { 
      jsonObject = new JSONObject(total.toString()); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    return jsonObject; 
} 

}

Есть ли возможность писать таким образом url = new URL("http://www.example/directory/index.php?action= PairActionName & PairMoney"); здесь PairActionName и PairMoney будут получать от MainActivity

+0

попробовали это на любом клиенте REST? что вы получаете на клиенте REST? –

+0

сэр, когда я пытаюсь использовать на xampp, получая результат и отображая в listview только с этим url («http://192.168.1.110/directory/») –

+0

после загрузки на сервер, я получаю проблему –

ответ

0

Поскольку вы используете AsyncTask для выполнения операций сервера, вы должны создать закодированный запрос string, чтобы передать аргументы URL-адресу и записать его в объект URL-соединения. В приведенном ниже примере будет ясно, что я только что сказал:

Uri.Builder builder = new Uri.Builder().appendQueryParameter("param1", value1) .appendQueryParameter("param2", value2); final String query = builder.build().getEncodedQuery(); URL url; HttpURLConnection connection = null; try{ url = new URL("http://www.example.com/directory/"); connection = (HttpURLConnection) url.openConnection(); OutputStream os = connection.getOutputStream(); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); writer.write(query); writer.flush(); writer.close(); os.close(); connection.connect(); }

На стороне сервера вы можете просто получить значения параметров (значение1), используя имя параметра (param1). Кроме того, вы можете добавить столько параметров, сколько вам нужно, используя метод .appendQueryParameter().

+0

проголосовать за ответ – myrahKaur

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