Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android I';我正在使用AsyncTask并获得线程错误_Android_Multithreading_Android Asynctask - Fatal编程技术网

Android I';我正在使用AsyncTask并获得线程错误

Android I';我正在使用AsyncTask并获得线程错误,android,multithreading,android-asynctask,Android,Multithreading,Android Asynctask,我正在通过AsyncTask innerclass向Yelp API发出请求。当我试图在onPostExecute()中打印结果时,会出现错误。这是我的密码: public class MainActivity extends Activity { Yelp yelp = new yelp(....); yelp.execute(); public class Yelp extends AsyncTask<String,Void,Response> { double _lo

我正在通过AsyncTask innerclass向Yelp API发出请求。当我试图在onPostExecute()中打印结果时,会出现错误。这是我的密码:

public class MainActivity extends Activity {

Yelp yelp = new yelp(....);
yelp.execute();
public class Yelp extends AsyncTask<String,Void,Response> {
    double _long = 1;
    double _lat= 1;
    String _term = "sushi";     
  OAuthService service;
  Token accessToken;
  public Yelp(String consumerKey, String consumerSecret, String token, String tokenSecret) {
    this.service = new ServiceBuilder().provider(YelpApi2.class).apiKey(consumerKey).apiSecret(consumerSecret).build();
    this.accessToken = new Token(token, tokenSecret);
  }

    @Override
    protected void onPostExecute(Response re) {
        try{
            System.out.println(re.getBody());
        }
        catch(Exception e){
            e.printStackTrace();
        }
     }

    @Override
    protected Response doInBackground(String... params) {
        OAuthRequest request = new OAuthRequest(Verb.GET, "http://api.yelp.com/v2/search");
        request.addQuerystringParameter("term", _term);
        request.addQuerystringParameter("ll", _lat + "," + _long);
        this.service.signRequest(this.accessToken, request);
        Response r = request.send();
        return r;
    }
}
}

onPostExecute()
在主线程上运行,不鼓励/不允许在主线程上处理网络操作。将所有网络操作移动到
doInBackground()
以避免抛出此错误

我猜是响应。getBody打开流并读取响应,这就是android在主线程上将其标记为网络的原因。您应该从doInBackground中的响应中读取字符串,并将字符串而不是响应返回到onPostExecute,这意味着将声明更改为
扩展异步任务
,并将doInBackground的返回类型更改为
字符串
这两行:

this.service = new ServiceBuilder().provider(YelpApi2.class).apiKey(consumerKey).apiSecret(consumerSecret).build();
this.accessToken = new Token(token, tokenSecret);
他们正在进行网络操作,这就是你的应用程序崩溃的原因。从构造函数中获取所需的任何引用,并在doInBackground上进行这些调用

编辑:

digitaljoel指出日志指向onPostExecute行,唯一合乎逻辑的答案是:


postExecute中的方法
re.getBody()
执行网络操作。

我假设这个公共Yelp(String consumerKey,String ConsumerCret,String token,String tokenSecret){this.service=new ServiceBuilder().provider(yelpapip2.class).apiKey(consumerKey).apiSecret(ConsumerCret.build());this.accessToken=new Token(Token,tokenSecret);}makes http requestsWell关于“未检测到GPU仿真的仿真器”的错误。修复了吗?您是否在正确的模拟器上运行此操作。这可能会导致错误,我们将不胜感激,因为这是您的解决方案。
this.service = new ServiceBuilder().provider(YelpApi2.class).apiKey(consumerKey).apiSecret(consumerSecret).build();
this.accessToken = new Token(token, tokenSecret);