2013-10-16 51 views
0

閱讀了一些教程後,我可以從MySql數據庫中使用php獲取訂單並在我的Android應用中顯示。我需要通過userId過濾此列表(useid保存在首選項中)。 我必須發送帶有參數「userId」的http請求,但我不知道如何。 ,我現在有的代碼:使用Android的參數發送json Http請求

public class JSONfunctions { 

public static JSONObject getJSONfromURL(String url){ 
    InputStream is = null; 
    String result = ""; 
    JSONObject jArray = null; 

    //http post 
    try{ 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(url); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 

    }catch(Exception e){ 
      Log.e("log_tag", "Error in http connection "+e.toString()); 
    } 

    //convert response to string 
    try{ 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
      } 
      is.close(); 
      result=sb.toString(); 
    }catch(Exception e){ 
      Log.e("log_tag", "Error converting result "+e.toString()); 
    } 

    try{ 

     jArray = new JSONObject(result);    
    }catch(JSONException e){ 
      Log.e("log_tag", "Error parsing data "+e.toString()); 
    } 

    return jArray; 
}  
} 

對於訂單列表:

public class Masuratori extends ListActivity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.listplaceholder); 

    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 


    JSONObject json = JSONfunctions.getJSONfromURL("http://MySite/masuratori.php"); 

    try{ 

     JSONArray earthquakes = json.getJSONArray("earthquakes"); 

     for(int i=0;i<earthquakes.length();i++){       
      HashMap<String, String> map = new HashMap<String, String>();  
      JSONObject e = earthquakes.getJSONObject(i); 

      map.put("id", String.valueOf(i)); 
      map.put("name", e.getString("clie")); 
      map.put("magnitude", e.getString("userid")); 
      map.put("adresa", e.getString("adr")); 
      map.put("detalii", e.getString("det")); 
      mylist.add(map);    
     }  
    }catch(JSONException e)  { 
     Log.e("log_tag", "Error parsing data "+e.toString()); 
    } 

    ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.activity_masuratori, 
        new String[] { "name", "adresa","detalii","magnitude"}, 
        new int[] { R.id.item_title, R.id.item_subtitle, R.id.item_subtitle2, R.id.item_subtitle3 }); 

    setListAdapter(adapter); 

    final ListView lv = getListView(); 
    lv.setTextFilterEnabled(true); 
    lv.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {    
      @SuppressWarnings("unchecked") 
      HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);     
      Toast.makeText(Masuratori.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_SHORT).show(); 

     } 
    }); 
} 
} 

我收到的喜好的用戶ID值:

public class Calculator extends Activity { 
TextView prefEditText; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_calculator); 
    prefEditText= (TextView)findViewById(R.id.textUser);   
    loadPref(); 
    prefEditText= (TextView)findViewById(R.id.prefEditText); 
    loadPref(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.calculator, menu); 
    return true; 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    //super.onActivityResult(requestCode, resultCode, data); 

    loadPref(); 
} 

private void loadPref(){ 
    SharedPreferences mySharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 


    String my_edittext_preference = mySharedPreferences.getString("edittext_preference", ""); 
    prefEditText.setText(my_edittext_preference); 

}   
} 

回答

0

由於您只發送一個參數,爲什麼不將它發送到查詢字符串中。

String userId = getUserId(); 
JSONObject json = JSONfunctions.getJSONfromURL("http://MySite/masuratori.php?userId=" + userId); 

然後你retrive在PHP

$userId = $_GET['userId'] 
+0

謝謝卡洛斯,我按你的說法做了。我無法確定如何從首選項中獲取用戶標識。如果我提出:「http://MySite/masuratori.php?userId = 6」沒問題,我只檢索了用戶標識6的記錄。「我不知道如何從首選項獲得用戶標識。 – cvmircea

1

你之前​​你HttpPost,您可以添加參數如下代碼:

// Add userId parameter 
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
nameValuePairs.add(new BasicNameValuePair("userId", "12345")); 
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
+0

感謝您answer.Can你告訴我在哪裏把代碼?我試圖把JSON函數放在行的上面:HttpPost httppost = new HttpPost(url);但它不起作用。 – cvmircea

+0

該代碼需要添加在該行之後,但在下一行之前。 – Jay