2012-04-08 19 views
3

Ich habe ein HTTP GET, das Informationen von einem URI empfängt. Der URI ist für Google Shopping.Eine Möglichkeit, einen URI basierend auf Benutzereingabe zu bearbeiten?

https://www.googleapis.com/shopping/search/v1/public/products?key=key&country=US&q=digital+camera&alt=atom 

(verließ meinen Schlüssel).

Gibt es eine Möglichkeit, dass ich es von

q=digital+camera 

auf alles, was ein Benutzer legt in einem EditText ändern?

Im Grunde möchte ich den EditText ändern, was bei Google Shopping gesucht wird.

ersten Bildschirm ProductSearchEntry mit EditText für Suchkriterien:

enter image description here

-Code für ProductSearchEntry

public class ProductSearchEntry extends Activity{ 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.productsearchentry); 

    Button search = (Button) findViewById(R.id.searchButton); 

    search.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent searchIntent = new Intent(getApplicationContext(), ProductSearch.class); 
       startActivity(searchIntent); 
     } 
    }); 
    } 
} 

Dann habe ich eine zweite Klasse, ProduktSuche, ohne Bild, aber nur diesen Code:

public class ProductSearch extends Activity{ 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.productsearchresults); 
    EditText searchQuery = (EditText) findViewById(R.id.searchQuery); 

     ProductSearchMethod test = new ProductSearchMethod(); 
     String entry; 
     TextView httpStuff = (TextView) findViewById(R.id.httpTextView); 
     try { 
      entry = test.getSearchData(searchQuery.getText().toString()); 
      httpStuff.setText(entry); 
       } catch (Exception e) { 
         e.printStackTrace(); 
    } 
} 
} 

, die die ProductSearchMethod Klasse verweist, die aus einem Textview besteht, die mit dem Code empfangen in der HTTP-GET geändert wird:

enter image description here

Code:

public class ProductSearchMethod { 

public String getSearchData(String query) throws Exception{ 
    BufferedReader in = null; 
    String data = null; 
    try{ 
     HttpClient client = new DefaultHttpClient(); 
     URI site = new URI("https://www.googleapis.com/shopping/search/v1/public/products?key=key&country=US&q="+query.replace(" ","+")+"&alt=atom"); 
    HttpGet request = new HttpGet(); 
    request.setURI(site); 
    HttpResponse response = client.execute(request); 
    in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
    StringBuffer sb = new StringBuffer(""); 
    String l = ""; 
    String nl = System.getProperty("line.seperator"); 
    while((l = in.readLine()) !=null){ 
     sb.append(l + nl); 
    } 
    in.close(); 
    data = sb.toString(); 
    return data; 
    }finally{ 
     if (in != null){ 
      try{ 
       in.close(); 
       return data; 
      }catch (Exception e){ 
       e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

ProductSearchMethod kommt toll, aber es ändert nicht den Text von "Loading Items" in den Website-Code. Ich hatte es vorher funktioniert, aber dann habe ich versucht zu bearbeiten, was es gesucht (all dies ^) und jetzt ändert es sich nicht.

Antwort

1

Nehmen Sie Änderungen in Ihrem Code wie

public class ProductSearchEntry extends Activity{ 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.productsearchentry); 
    EditText etSearch = (EditText) findViewById(id of your edittext); 
    Button search = (Button) findViewById(R.id.searchButton); 

    search.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      //while calling intent 

      Intent searchIntent = new Intent(getApplicationContext(), ProductSearch.class); 
      searchIntent.putExtra("searchText",etSearch.getText().toString()); 
      startActivity(searchIntent); 
     } 
    }); 
    } 
} 

und eine andere Tätigkeit wie diese,

public class ProductSearch extends Activity{  
protected void onCreate(Bundle savedInstanceState){  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.productsearchresults);  
     String searchQuery = getIntent().getStringExtra("searchText");  
     ProductSearchMethod test = new ProductSearchMethod();  
     String entry;  
     TextView httpStuff = (TextView) findViewById(R.id.httpTextView);  
     try {  
      entry = test.getSearchData(searchQuery);  
      httpStuff.setText(entry);  
       } catch (Exception e) {  
         e.printStackTrace();  
    }  
}  
} 
+0

Ja! Ich habe es repariert. Ich danke dir sehr! – Cole

0

Yeah ... Ändern Sie Ihre getSearchData() -Methode einen String als Parameter enthalten

public String getSearchData(String query) throws Exception{

Dann legen Sie diese Zeichenfolge in die Abfrage-URL ersetzt Räume mit "+". Möglicherweise möchten Sie die Zeichenfolge weiter aufbereiten, z. B. URL-Codierung.

URI site = new URI("https://www.googleapis.com/shopping/search/v1/public/products?key=key&country=US&q="+query.replace(" ","+")+"&alt=atom");

In Ihrem XML, erstellen Sie eine Schaltfläche, die die folgende Zeile enthält:

android:onClick="search"

In Ihrer ProduktSuche Aktivität, die folgende Methode hinzufügen und den Code in onCreate hinein bewegen. Sie müssen auch einen EditText in Ihrem XML für die Eingabe erstellen.

public void search(View v) 
{ 
    EditText searchQuery = (EditText) findViewById(R.id.searchQuery); 

    ProductSearchMethod test = new ProductSearchMethod(); 
    String returned; 
    try { 
     returned = test.getSearchData(searchQuery.getText().toString()); 
     httpStuff.setText(returned); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 

    } 
} 

Schließlich werden Sie wollen wahrscheinlich auf laufende asynchrone Aufgaben zu lesen, so dass die Abfrage nicht Ihre App einfrieren während der Durchführung.

+0

Edited OP mit aktualisiertem Code. – Cole

+0

Kopfgeld hinzugefügt und OP komplett geändert. – Cole

0

Kann sein, ich habe Sie falsch, aber warum Sie nicht nur als Parameter übergeben es in

getSearchData() => getSearchData(string query) 

Dann können Sie die Zeile

URI site = new URI("https://www.googleapis.com/shopping/search/v1/public/products?key=key&country=US&q=digital+camera&alt=atom"); 

zu

URI site = new URI("https://www.googleapis.com/shopping/search/v1/public/products?key=key&country=US&q=+ URLEncoder.encode(query, "UTF-8")+&alt=atom"); 
+0

Was macht der UTF-8? Ich meine, wie kann ich das benutzen? – Cole

+0

UTF-8 ist die Textkodierung. –

Verwandte Themen