为什么不能在AsyncTask中使用if / else?

时间:2014-06-06 07:37:15

标签: java android if-statement android-asynctask

为什么我无法在 AsyncTast 中使用if / else块。

当我尝试使用if / else时,它会抛弃我" 语法错误"。

这是我的代码垃圾。

    package com.xyz.asd;

    @SuppressLint("NewApi")
    public class MapActivity extends Activity implements LocationListener {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_map);
            locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    // taking location by GPS / network 
            if(location!=null)
            {
    // move camear to latlong by locationManager 
    new HttpGetTask().execute();
            }
            else
            {
                // pass hard coded lat long to move camera
                new HttpGetTask().execute();
            }

            if (location != null) {
    //Display some toast
            }
        }
        @Override
        protected void onPause() {
    // bla bla
        }
        @Override
        protected void onResume() {
    // bla bla
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
    // bla bla
        }
        @Override
        public void onLocationChanged(Location location) {
            // TODO Auto-generated method stub
        }
        public boolean onOptionsItemSelected(MenuItem item) {
    // bla bla             
            }
        }
        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub
    //bla 
        }
        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub
    //bla
        }
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub
        }


        private class HttpGetTask extends AsyncTask<Void, Void, String> {
            protected void onPreExecute() {
                super.onPreExecute();
                // Showing progress dialog
            }
            Double lat = locationManager.getLastKnownLocation(provider)
                    .getLatitude();
            Double lng = locationManager.getLastKnownLocation(provider)
                    .getLongitude();

**//*************************PROBLEM IN IF ELSE***********************************
            if(lat != null && lng!= null)
            {String URL = "http://xyz.in/api/stores/around_me.json?app_id=test&lat="
                    + lat + "&lng=" + lng; }
            else
            {
            String URL = "http://xyz.in/api/stores/around_me.json?       
                               app_id=test&lat=12.58&lng=77.38";
            }
//********************************************************************************

            AndroidHttpClient mClient = AndroidHttpClient.newInstance("");
            @Override
            protected String doInBackground(Void... params) {


                HttpGet request = new HttpGet(URL);

                ResponseHandler<String> responseHandler = new BasicResponseHandler();
                try {
                    return mClient.execute(request, responseHandler);
                } catch (ClientProtocolException exception) {
                    exception.printStackTrace();
                } catch (IOException exception) {
                    exception.printStackTrace();
                }
                return null;
            }
            @Override
            protected void onPostExecute(String result) {
                if (pDialog.isShowing())
                    pDialog.dismiss();
                try {

    //JSON parsing 
                    }
                });
                if (null != mClient)
                    mClient.close();
            }
        }
    }

有人能告诉我它是什么/为什么会出现这种行为? 我错了吗?如何更正我的条件以将有效的URL传递给我的http get请求?

5 个答案:

答案 0 :(得分:4)

if不在任何方法中。它只是在课堂上输了。把它放在背景中的do或更好的方法中:

private String getUrl(Double lat, Double long) {
   if(lat != null && lng!= null) {
      String URL = "http://xyz.in/api/stores/around_me.json?app_id=test&lat="
                + lat + "&lng=" + lng;
      return URL;
   }
   else {
      String URL = "http://xyz.in/api/stores/around_me.json?       
                           app_id=test&lat=12.58&lng=77.38";
      return URL;
   }
}

正如其他答案指出if条件也存在问题。一旦它在一个有效的地方,这应该变得更加清晰。

答案 1 :(得分:1)

首先纠正这个

if(lat&&lng!= null)

if 条件应该是

if(lat!= null && lng!= null)

答案 2 :(得分:0)

您在类级别定义 If ... else 块是错误的。所以在onPreexecute方法中将其写为

  String URL = "";
     protected void onPreExecute() {
                    super.onPreExecute();

    if (lat!=null && lng!=null)
                { URL = "http://xyz.in/api/stores/around_me.json?app_id=test&lat="
                        + lat + "&lng=" + lng; }
                else
                {
                URL = "http://xyz.in/api/stores/around_me.json?       
                                   app_id=test&lat=12.58&lng=77.38";
                }
    }

答案 3 :(得分:0)

检查您的代码是否在块之外,将其写入块中。

删除以下代码后

检查错误

Double lat = locationManager.getLastKnownLocation(provider).getLatitude();
Double lng = locationManager.getLastKnownLocation(provider).getLongitude();

**//*************************PROBLEM IN IF ELSE***********************************
if(lat&&lng!= null)
{
   String URL = "http://xyz.in/api/stores/around_me.json?app_id=test&lat=" + lat + "&lng=" + lng; 
} else {
   String URL = "http://xyz.in/api/stores/around_me.json?app_id=test&lat=12.58&lng=77.38";
}
//********************************************************************************

AndroidHttpClient mClient = AndroidHttpClient.newInstance("");

更改

if(lat!= null && lng!= null)

而不是

if(lat&&lng!= null)

答案 4 :(得分:-1)

该问题与AsyncTask无关,该条件有语法错误,并会在您放置它的任何地方显示。

if(lat&&lng!= null)

lat不是布尔值,因此无法在if内部进行求值,我想你想要的是:

if (lat!=null && lng!=null)