Android 什么';我的任务有什么问题?不';似乎执行不正确

Android 什么';我的任务有什么问题?不';似乎执行不正确,android,android-asynctask,Android,Android Asynctask,我试图运行一个AsyncTask来从RESTAPI返回结果,但我编写的代码似乎没有运行。当我在应用程序中运行到异步任务应该运行的位置时,没有显示任何内容。没有错误,数据永远不会显示。此外,当我输入created somelog.Is以显示返回的数据时,LogCat窗口中没有显示任何内容 以下是相关代码: public class PlaceActivity extends FragmentActivity { public static final String EXTRA_URL = "ur

我试图运行一个AsyncTask来从RESTAPI返回结果,但我编写的代码似乎没有运行。当我在应用程序中运行到异步任务应该运行的位置时,没有显示任何内容。没有错误,数据永远不会显示。此外,当我输入created some
log.I
s以显示返回的数据时,LogCat窗口中没有显示任何内容

以下是相关代码:

public class PlaceActivity extends FragmentActivity {

public static final String EXTRA_URL = "url";
public static final String GEO = "geo";
public static final LatLng LOCATION = new LatLng(53.551, 9.993);

private GoogleMap mMap;
protected Factual factual = new Factual("xyz", "xyz"); //new Factual code
private TextView resultText = null; //new Factual code

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_place);
    setupActionBar();
    Bundle extras = getIntent().getExtras();

    if (extras != null) {
        String name = extras.getString(EXTRA_URL);
        String geo = extras.getString(GEO);
        Log.i("geo", geo); //currently from_user
        Log.i("name", name); //currently text
        TextView venueLocation = (TextView) findViewById(R.id.vLocation); //was detailsText
        //view.setText(name + " " + geo);
        TextView venName = (TextView) findViewById(R.id.vName);
        venueLocation.setText(geo);
        venName.setText(name);
        setUpMapIfNeeded();
        factualQuery(); //new Factual code
    }
}

private void setUpMapIfNeeded() {
    //Do a null check to confirm that we have not already instantiated the map.
    if (mMap == null) {
        mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
        if (mMap != null) {
            //do things to the map
            mMap.addMarker(new MarkerOptions().position(LOCATION).title(EXTRA_URL));
            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(LOCATION,15));
            mMap.getUiSettings().setZoomControlsEnabled(false);
        }
    }
}

public void factualQuery() {
    resultText = (TextView) findViewById(R.id.resultText);
    FactualRetrievalTask task = new FactualRetrievalTask();

    double latitude = 34.06018; //set programmatically
    double longitude = -118.41835; //set programmatically
    int meters = 500; //have a default and then set programmatically if needed?
    LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    String locationProvider = LocationManager.GPS_PROVIDER;
    Location location = locationManager.getLastKnownLocation(locationProvider);
    if (location != null) {
        latitude = location.getLatitude();
        longitude = location.getLongitude();
    }


    Query query = new Query()
    .within(new Circle(latitude, longitude, meters))
    .field("cuisine").equal("Italian")
    .sortAsc("$distance")
    .only("name", "address", "tel");

    task.execute(query);
}

public class FactualRetrievalTask extends AsyncTask<Query, Integer, List<ReadResponse>> {

    @Override
    protected List<ReadResponse> doInBackground(Query... params) {
        List<ReadResponse> results = Lists.newArrayList(); 
        for (Query q : params) {
            results.add(factual.fetch("restaurants-us", q));
        }
        return results;
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {
    }

    @Override
    protected void onPostExecute(List<ReadResponse> responses) {
        StringBuffer sb = new StringBuffer();
        for (ReadResponse response : responses) {
            for (Map<String, Object> restaurant : response.getData()) {
            String name = (String) restaurant.get("name");
            Log.i("name", name);
            String address = (String) restaurant.get("address");
            Log.i("address", address);
            String phone = (String) restaurant.get("tel");
            Log.i("tel", phone);
            Number distance = (Number) restaurant.get("$distance");
            sb.append(distance + " meters away: "+name+" @ " +address + ", call "+phone);
            sb.append(System.getProperty("line.separator"));
            }  
        }
        resultText.setText(sb.toString());
    }
}   
公共类PlaceActivity扩展了FragmentActivity{
公共静态最终字符串EXTRA_URL=“URL”;
公共静态最终字符串GEO=“GEO”;
公共静态最终车床位置=新车床(53.551,9.993);
私有谷歌地图;
受保护的事实=新事实(“xyz”,“xyz”);//新事实代码
私有文本视图resultText=null;//新的事实代码
@SuppressLint(“新API”)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局、活动地点);
setupActionBar();
Bundle extras=getIntent().getExtras();
如果(附加值!=null){
String name=extras.getString(EXTRA_URL);
String geo=extras.getString(geo);
Log.i(“geo”,geo);//当前来自用户
Log.i(“name”,name);//当前文本
TextView-venueLocation=(TextView)findViewById(R.id.vLocation);//was-detailsText
//view.setText(name+“”+geo);
TextView-venName=(TextView)findViewById(R.id.vName);
venueLocation.setText(地理位置);
venName.setText(名称);
setupmapifneed();
factualQuery();//新的事实代码
}
}
私有void setUpMapIfNeeded(){
//执行空检查以确认尚未实例化映射。
如果(mMap==null){
mMap=((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
如果(mMap!=null){
//对地图做些什么
mMap.addMarker(新的MarkerOptions().position(LOCATION).title(EXTRA_URL));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(位置15));
mMap.getUiSettings().setZoomControlsEnabled(false);
}
}
}
公开无效事实查询(){
resultText=(TextView)findViewById(R.id.resultText);
FactualRetrievalTask任务=新建FactualRetrievalTask();
双纬度=34.06018;//以编程方式设置
双经度=-118.41835;//以编程方式设置
int meters=500;//是否有默认值,然后根据需要通过编程进行设置?
LocationManager LocationManager=(LocationManager)this.getSystemService(Context.LOCATION\u服务);
字符串locationProvider=LocationManager.GPS\u PROVIDER;
Location Location=locationManager.getLastKnownLocation(locationProvider);
如果(位置!=null){
纬度=位置。getLatitude();
longitude=location.getLongitude();
}
查询=新查询()
.在(新圆圈内(纬度、经度、米))
.field(“烹饪”).equal(“意大利语”)
.sortAsc($distance)
.仅限(“姓名”、“地址”、“电话”);
任务执行(查询);
}
公共类FactualRetrievalTask扩展了AsyncTask{
@凌驾
受保护列表doInBackground(查询…参数){
列表结果=Lists.newArrayList();
for(查询q:参数){
结果。添加(事实。获取(“美国餐馆”,q));
}
返回结果;
}
@凌驾
受保护的void onProgressUpdate(整数…进度){
}
@凌驾
受保护的void onPostExecute(列出响应){
StringBuffer sb=新的StringBuffer();
for(ReadResponse:responses){
对于(映射餐厅:response.getData()){
String name=(String)restaurant.get(“name”);
Log.i(“名称”,名称);
字符串地址=(字符串)restaurant.get(“地址”);
Log.i(“地址”,地址);
String phone=(String)restaurant.get(“tel”);
Log.i(“电话”,电话);
数字距离=(数字)餐厅。获取($distance);
某人附加(距离+米远:“+姓名+”@“+地址+”,呼叫“+电话);
sb.append(System.getProperty(“line.separator”);
}  
}
resultText.setText(sb.toString());
}
}   
}

onPostExecute()
中的
log.i
似乎没有显示任何内容,这让我相信它没有被执行。奇怪的是,这段代码以前在不同的项目中运行,没有任何问题

我认为这可能是一个与依赖性相关的问题(因为这是代码中的一个问题),但正如我所说的,我没有得到任何错误。依赖关系是否仍然是一个问题?有什么奇怪的吗


谢谢

您是否在模拟器中进行测试?如果是,emulator默认情况下不会给你位置,你必须提供它的坐标,然后它将提供给你的应用程序。看见
您可以尝试在设备上运行它,并查看它是否运行网络获取。

首先,在doInBackground()中添加一些Log.d,以检查aynctask是否被网络阻止。
之前是否有其他aynctask正在运行?默认情况下,AsyncTask将只使用单线程,因此它将被其他AsyncTask阻止。

发现这是一个依赖项问题。我尝试了以前不起作用的老项目,突然它开始起作用了。我将当前项目与另一个项目的依赖项相匹配,从而解决了问题。我最初犹豫是否这样做,因为我在上一个项目及其依赖项中遇到了构建错误,但我删除了导致该错误的原因,现在我认为我很好

有人能给我解释一下,为什么依赖关系可以解决这个问题,但我不会收到错误,告诉我某些方法/变量丢失了(即NullPointer、NoSuchMethod等)?

似乎看不到