我不能让我的新线程运作

时间:2014-04-29 03:09:09

标签: android google-maps http-get

我真的很新的Android,我需要我的应用程序将我当前的坐标发送到我的webapp,为了实现这一点,我做了一个新的线程,但线程没有做任何事情。魔术是在SendQueryString()函数中发生的。 我的代码是:

     @Override
     public void onLocationChanged(Location location) {
     // Draw the marker, if destination location is not set
     latitude = location.getLatitude();
     longitude = location.getLongitude();
     if (mMarkerPoints.size() < 2) {

     mLatitude = location.getLatitude();
     mLongitude = location.getLongitude();
     LatLng point = new LatLng(mLatitude, mLongitude);

     mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(point));
     mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(18));

     drawMarker(point);
     }
     String Text = "My current Latitude = " + latitude + " Longitude = "
     + longitude;
     Thread trd = new Thread(new Runnable() {
            @Override
            public void run() {
                try {

                    SendQueryString();
                } catch (Throwable e) {
                    e.printStackTrace();
                }
            }
        });
        trd.start();


     }

    public void SendQueryString() {
                String url = "http://sistemamedicointegrado.azurewebsites.net/Home/Ubicacion?latitud="
                        + latitude + "&longitud=" + longitude + "&id=4";

                try {
                    HttpClient Client = new DefaultHttpClient();
                    HttpGet httpget = new HttpGet(url);
                    Client.execute(httpget);

                } catch (Exception ex) {

                }
            }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

    }


    }

2 个答案:

答案 0 :(得分:0)

在线程中显示Toast不起作用。 Ui只能在ui线程上更新。

你有

  SendQueryString();

在Threads中运行方法

然后在SendQueryString()中显示

  Toast.makeText(getApplicationContext(), "YESS",
                        Toast.LENGTH_SHORT).show();

这是错误的。

您可以使用Thread代替Asynctask,而可以覆盖onPreExecuteonPostExecuteonProgressUpdate并更新ui。您可以在doInBackground

中完成后台工作

答案 1 :(得分:0)

要在线程内显示toast意味着你必须使用runonUIThread

runOnUiThread(new Runnable(){                  public void run(){

                 Toast.makeText(ActivityName.this,"YESS",Toast.LENGTH_LONG).show();
            }
        });

否则使用handler来设置消息并与主UI线程进行通信。例如

Inside thread use this code 

h.sendEmptyMessage(0);

and then  call this handleMessage method

Handler h = new Handler() {
  public void handleMessage(Message msg){
    if(msg.what == 0){
      Toast.makeText(Activityname, "HelloWorld!", Toast.LENGTH_SHORT).show();
    }
  }
};