在下面的list.java中,我在底部附近创建了一个抓取当前位置并将其添加到URL的URL。我有一个PHP脚本从URL获取位置,然后做它的事情并返回基于JSON的数组。我需要在我的代码的oncreate区域的HttpPost中获取要访问的URL字符串。
public class List extends ListActivity {
int ct_id;
String[] ct_number = null;
String[] ct_address = null;
String[] ct_phone = null;
String[] ct_fax = null;
String[] ct_email = null;
String[] ct_city = null;
String[] ct_province = null;
String[] ct_country = null;
String[] ct_pcode = null;
String[] ct_lat = null;
String[] ct_long = null;
String[] ct_distance = null;
String[] ct_show = null;
String[] ct_listinfo = null;
MyLocation myLocation = new MyLocation();
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.timslist);
findCurrentLocation();
String result = null;
InputStream is = null;
StringBuilder sb = null;
//http post
try{
HttpClient httpclient = new DefaultHttpClient();
//This is where i need the myurl string to be accessed
HttpPost httppost = new HttpPost(Need_the_myurl_String_here);
//httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
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);
sb = new StringBuilder();
sb.append(reader.readLine() + "\n");
String line="0";
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());
}
//paring data
JSONArray jArray;
try{
jArray = new JSONArray(result);
JSONObject json_data=null;
ct_number=new String[jArray.length()];
ct_address=new String[jArray.length()];
ct_phone=new String[jArray.length()];
ct_fax=new String[jArray.length()];
ct_email=new String[jArray.length()];
ct_city=new String[jArray.length()];
ct_province=new String[jArray.length()];
ct_country=new String[jArray.length()];
ct_pcode=new String[jArray.length()];
ct_lat=new String[jArray.length()];
ct_long=new String[jArray.length()];
ct_distance=new String[jArray.length()];
ct_listinfo=new String[jArray.length()];
for(int i=0;i<jArray.length();i++){
json_data = jArray.getJSONObject(i);
ct_id=json_data.getInt("location_id");
ct_number[i]=json_data.getString("store_number");
ct_address[i]=json_data.getString("store_address");
ct_phone[i]=json_data.getString("store_phone");
ct_fax[i]=json_data.getString("store_fax");
ct_email[i]=json_data.getString("store_email");
ct_city[i]=json_data.getString("store_city");
ct_province[i]=json_data.getString("store_province");
ct_country[i]=json_data.getString("store_country");
ct_pcode[i]=json_data.getString("store_pcode");
ct_lat[i]=json_data.getString("store_lat");
ct_long[i]=json_data.getString("store_long");
ct_distance[i]=json_data.getString("store_distance");
ct_listinfo[i] = new String (ct_address[i] + "\n" + ct_city[i] + ", " + ct_province[i] + " - " + ct_distance[i] + " Km Away");
}
}
catch(JSONException e1){
Toast.makeText(getBaseContext(), "No Locations Found" ,Toast.LENGTH_LONG).show();
} catch (ParseException e1) {
e1.printStackTrace();
}
setListAdapter(new ArrayAdapter<String>(this,R.layout.listview,ct_listinfo));
ListView lv;
lv = getListView();
lv.setTextFilterEnabled(true);
lv.setCacheColorHint(Color.TRANSPARENT);
lv.setBackgroundColor(Color.TRANSPARENT);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> timslist, View view,
int position, long id) {
Intent i = new Intent(getApplicationContext(), ListMore.class);
i.putExtra("ct_number_pass", ct_number[position]);
i.putExtra("ct_address_pass", ct_address[position]);
i.putExtra("ct_phone_pass", ct_phone[position]);
i.putExtra("ct_city_pass", ct_city[position]);
i.putExtra("ct_province_pass", ct_province[position]);
i.putExtra("ct_country_pass", ct_country[position]);
i.putExtra("ct_pcode_pass", ct_pcode[position]);
i.putExtra("ct_distance_pass", ct_distance[position]);
startActivity(i);
}
});
}
private void findCurrentLocation() {
myLocation.getLocation(this, locationResult);
}
public LocationResult locationResult = new LocationResult() {
@Override
public void gotLocation(Location location) {
// TODO Auto-generated method stub
if (location != null) {
//Here is the String i am trying to access
String myurl = "http://www.doamin.com/list.php?lat=" + location.getLatitude() + "&long=" + location.getLongitude();
}
}
};
}
我在其他人的帮助下尝试过,但似乎无法正常工作,所以我试图看看是否有一个简单易用的解决方案。
答案 0 :(得分:0)
您无法执行此操作:您尝试在返回给您之前访问位置值。你应该:
gotLocation
方法向处理程序发送消息。编辑:尝试创建一个这样的方法:
void updateData(String url)
{
String result = null;
InputStream is = null;
StringBuilder sb = null;
//http post
try{
HttpClient httpclient = new DefaultHttpClient();
//This is where i need the myurl string to be accessed
HttpPost httppost = new HttpPost(url);
//httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
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);
sb = new StringBuilder();
sb.append(reader.readLine() + "\n");
String line="0";
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());
}
//paring data
JSONArray jArray;
try{
jArray = new JSONArray(result);
JSONObject json_data=null;
ct_number=new String[jArray.length()];
ct_address=new String[jArray.length()];
ct_phone=new String[jArray.length()];
ct_fax=new String[jArray.length()];
ct_email=new String[jArray.length()];
ct_city=new String[jArray.length()];
ct_province=new String[jArray.length()];
ct_country=new String[jArray.length()];
ct_pcode=new String[jArray.length()];
ct_lat=new String[jArray.length()];
ct_long=new String[jArray.length()];
ct_distance=new String[jArray.length()];
ct_listinfo=new String[jArray.length()];
for(int i=0;i<jArray.length();i++){
json_data = jArray.getJSONObject(i);
ct_id=json_data.getInt("location_id");
ct_number[i]=json_data.getString("store_number");
ct_address[i]=json_data.getString("store_address");
ct_phone[i]=json_data.getString("store_phone");
ct_fax[i]=json_data.getString("store_fax");
ct_email[i]=json_data.getString("store_email");
ct_city[i]=json_data.getString("store_city");
ct_province[i]=json_data.getString("store_province");
ct_country[i]=json_data.getString("store_country");
ct_pcode[i]=json_data.getString("store_pcode");
ct_lat[i]=json_data.getString("store_lat");
ct_long[i]=json_data.getString("store_long");
ct_distance[i]=json_data.getString("store_distance");
ct_listinfo[i] = new String (ct_address[i] + "\n" + ct_city[i] + ", " + ct_province[i] + " - " + ct_distance[i] + " Km Away");
}
}
catch(JSONException e1){
Toast.makeText(getBaseContext(), "No Locations Found" ,Toast.LENGTH_LONG).show();
} catch (ParseException e1) {
e1.printStackTrace();
}
setListAdapter(new ArrayAdapter<String>(this,R.layout.listview,ct_listinfo));
ListView lv;
lv = getListView();
lv.setTextFilterEnabled(true);
lv.setCacheColorHint(Color.TRANSPARENT);
lv.setBackgroundColor(Color.TRANSPARENT);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> timslist, View view,
int position, long id) {
Intent i = new Intent(getApplicationContext(), ListMore.class);
i.putExtra("ct_number_pass", ct_number[position]);
i.putExtra("ct_address_pass", ct_address[position]);
i.putExtra("ct_phone_pass", ct_phone[position]);
i.putExtra("ct_city_pass", ct_city[position]);
i.putExtra("ct_province_pass", ct_province[position]);
i.putExtra("ct_country_pass", ct_country[position]);
i.putExtra("ct_pcode_pass", ct_pcode[position]);
i.putExtra("ct_distance_pass", ct_distance[position]);
startActivity(i);
}
});
}
void updateList(final String url)
{
getListView().post(new Runnable(){ public void run(){ updateData(url); }});
}
然后在gotLocation
中执行此操作:
@Override
public void gotLocation(Location location) {
// TODO Auto-generated method stub
if (location != null) {
//Here is the String i am trying to access
updateList("http://www.doamin.com/list.php?lat=" + location.getLatitude() + "&long=" + location.getLongitude());
}
}
你需要修复任何编译错误,但是这样的事情对你有用。