为什么我无法在 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请求?
答案 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)