我怎么能通过这个信息?

时间:2011-06-10 19:56:00

标签: android

在下面的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();

            }
        }
    };
}

我在其他人的帮助下尝试过,但似乎无法正常工作,所以我试图看看是否有一个简单易用的解决方案。

1 个答案:

答案 0 :(得分:0)

您无法执行此操作:您尝试在返回给您之前访问位置值。你应该:

  1. 向您的班级添加处理程序实例。
  2. 将HttpClient / HttpPost调用移动到单独的方法中。
  3. 使用位置数据从gotLocation方法向处理程序发送消息。
  4. 使用上面步骤3中的位置数据从Handler调用该方法。
  5. 编辑:尝试创建一个这样的方法:

    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());
                }
            }
    

    你需要修复任何编译错误,但是这样的事情对你有用。