2015-05-18 86 views
0

我正在開發一個應用程序,現在我必須傳遞一個參數到一個RESTful服務的URL。
我使用的是AsyncTask,我需要將列表視圖中的文本作爲參數傳遞給URL,例如:
URL爲http://ip:7001/product?product_name=PARAM
我需要從列表視圖中獲取選定項目的文本,並且作爲PARAM中的參數傳遞,使用AsyncTask。
我已經從listView中的項目中獲得文本,現在我只需要將它作爲參數傳遞。傳遞參數到一個URL AsyncTask android

這是我AsycTask類:

package com.tumta.henrique.teste; 

import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.net.URLEncoder; 
import java.util.ArrayList; 
import java.util.List; 
import com.tumta.henrique.teste.ProdutoFragment; 

/** 
* Created by Henrique on 18/05/2015. 
*/ 
public class FiltraProduto extends AsyncTask<String, Void, List<String>> { 

    private ConsultaConcluidaFiltroProdutoListener listener; 

    public static String URL_STRING = "http://192.168.0.20:7001/com.henrique.rest/api/v1/status/pro_filtro?pro_nome="; 

    public FiltraProduto(ConsultaConcluidaFiltroProdutoListener listener) { 
     this.listener = listener; 
    } 





    private List<String> InterpretaResultado(String resultado) throws JSONException { 
     JSONObject object = new JSONObject(resultado); 
     JSONArray jsonArray = object.getJSONArray("produto"); 
     //JSONObject jsonProduto = jsonArray.getJSONObject(0); 
     // String id = jsonProduto.getString("pro_id"); 
     //proId = id; 
     List<Object> listaNomes = new ArrayList<>(); 
     for (int i = 0; i < jsonArray.length(); i++) { 
      JSONObject jsonProdutoInfo = jsonArray.getJSONObject(i); 
      String proNome= jsonProdutoInfo.getString("pro_nome"); 
      double proPreco = jsonProdutoInfo.getDouble("pro_preco"); 
      double proSdAtual = jsonProdutoInfo.getDouble("pro_sdAtual"); 
      listaNomes.add(i, proNome); 
      listaNomes.add(i, proPreco); 
      listaNomes.add(i, proSdAtual); 
     } 
     List<String> strings = new ArrayList<String>(); 
     for (Object o : listaNomes) { 
      strings.add(o != null ? o.toString() : null); 
     } 
     return strings; 
    } 

    private String ConsultaServidor() throws IOException { 
     InputStream is = null; 

     try { 
      URL url = new URL(URL_STRING); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setConnectTimeout(10000); 
      conn.setReadTimeout(15000); 
      conn.setRequestMethod("GET"); 
      conn.setDoInput(true); 
      conn.connect(); 
      conn.getResponseCode(); 

      is = conn.getInputStream(); 

      Reader reader = null; 
      reader = new InputStreamReader(is); 
      char[] buffer = new char[2048]; 
      reader.read(buffer); 
      return new String(buffer); 
     } finally { 
      if (is != null) { 
       is.close(); 
      } 
     } 
    } 

    @Override 
    protected List<String> doInBackground(String... params) { 
     try { 
      String resultado = ConsultaServidor(); 
      return InterpretaResultado(resultado); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(List<String> result) { 
     listener.onConsultaConcluida(result); 
     super.onPostExecute(result); 
    } 


    public interface ConsultaConcluidaFiltroProdutoListener { 
     void onConsultaConcluida(List<String> result); 
    } 
} 

在URL_STRING我需要通過帕拉姆在pro_nome =?

在這裏,我得到的項目文本。這是我的片段具有列表視圖:

public String retornaParam(String param){ 
     return param; 
    } 

    @Override 
    public void onConsultaConcluida(List<String> result) { 
     final ListView listaProdutos = (ListView) getView().findViewById(R.id.listaprodutos); 
     ArrayAdapter arrayAdapter = new ArrayAdapter<>(getView().getContext(),android.R.layout.simple_list_item_1, result); 
     listaProdutos.setAdapter(arrayAdapter); 
     listaProdutos.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      public void onItemClick(AdapterView<?> parentAdapter, View view, int position, 
            long id) { 
       String nomeProduto = listaProdutos.getItemAtPosition(position).toString(); 
       retornaParam(nomeProduto); 
       Intent intent = new Intent(getActivity(), DetalhesProdutoActivity.class); 
       //intent.putExtra("pro_nome", listaProdutos.getItemAtPosition(position).toString()); 
       startActivity(intent); 
      } 
     }); 
    } 

我得到的文本,並將其存儲在從retornaParam方法PARAM。
有人知道該怎麼做嗎?
如果您需要更多信息,請告訴我。

+0

見我的回答應該幫助你。 – AnixPasBesoin

回答

0

發送執行你的HttpClient前只需添加以下代碼:

URL_STRING + = textInsideYourTextView; 

它應該工作,只是避免操縱你的UI線程之外的用戶界面元素。

+0

爲我工作!謝謝! –

1

您在PARAMS傳遞到使用的AsyncTask:

YourAsyncTask.execute(yourview.getText(), "and", "more", "params"); 

然後,您可以訪問這些

@Override 
protected String doInBackground(String... params) { 
URL_STRING += params[0]; 
...