相关疑难解决方法(0)

对重新创建的活动实施Retrofit回调的最佳实践?

我正在转向Retrofit并尝试理解使用异步回调的正确架构.

例如,我有一个界面:

interface RESTService{
    @GET("/api/getusername")
    void getUserName(@Query("user_id") String userId, 
                     Callback<Response> callback);
}
Run Code Online (Sandbox Code Playgroud)

我从主要活动中运行这个:

RestAdapter restAdapter = new RestAdapter.Builder()
        .setServer("WEBSITE_URL")     
        .build();
RESTService api = restAdapter.create(RESTService.class);
api.getUserName(userId, new Callback<Response> {...});
Run Code Online (Sandbox Code Playgroud)

然后用户旋转设备,我有新创建的活动......这里发生了什么?如何获得对新活动的响应(我假设api调用后台将比第一个活动生命执行更长时间).也许我必须使用静态回调实例或者什么?请告诉我正确的方法......

rest android web-services retrofit

72
推荐指数
5
解决办法
7万
查看次数

Android:AsyncTask建议:私有类还是公共类?

我目前正在团队中开发一些Android应用程序,我们在过去几个月中使用了两种不同的方法(一种是我个人喜欢的,另一种是另一种开发者喜欢的).

虽然到目前为止结果是一样的,但这让我感到疑惑...我们应该:

  • 使用AsyncTasks作为使用它们的Activities中的私有类.
  • 或使用AsyncTasks作为接收活动上下文的单独公共类

Google建议使用哪种方法?

您的经验对此有何看法(优点,缺点,问题)?

android android-asynctask

43
推荐指数
2
解决办法
1万
查看次数

AsyncTask和上下文

所以我正在使用Android和AsyncTask类开发我的第一个多线程应用程序.我正在尝试使用它在第二个线程中触发Geocoder,然后使用onPostExecute更新UI,但我仍然遇到了正确的Context问题.

我在主线程上使用Contexts有点蠢蠢欲动,但我不确定Context是什么或如何在后台线程上使用它,我还没有找到任何好的例子.有帮助吗?以下是我要做的事情的摘录:

public class GeoCode extends AsyncTask<GeoThread, Void, GeoThread> {
  @Override
  protected GeoThread doInBackground(GeoThread... i) {
    List<Address> addresses = null;
    Geocoder geoCode = null; 
    geoCode = new Geocoder(null); //Expects at minimum Geocoder(Context context);
    addresses = geoCode.getFromLocation(GoldenHour.lat, GoldenHour.lng, 1);
  }
}
Run Code Online (Sandbox Code Playgroud)

由于上下文不正确,它在第六行仍然失败.

java android android-context android-asynctask

19
推荐指数
2
解决办法
3万
查看次数

外部类中的Android AsyncTask

我一直在研究一个应用程序,并且我已经设法AsyncTask让它在内部类中工作正常.

现在,我正在重构代码,以便AsyncTask它自己在一个单独的类中,但我想知道,ProgressDialog一旦任务成功完成,我如何杀死并启动一个新的Activity?我已尝试在onPostExecute(..)方法中启动一个新的Activity ,但我知道这不起作用.


将我的UI线程活动作为参数传递给AsyncTask的构造函数似乎不起作用:

//In UI Thread I had
public class Test101 extends Activity {
    private Button btnLogin;
    private LoginTask mLoginTask;
    private Context context=this;
    private Test101 mTest101;

    mLoginTask=new LoginTask(context,mTest101);
    mLoginTask.execute(null);

    // In the AsyncTask I had
    Activity mParentActivity;

    public LoginTask(Context context,Activity act){
        this.ctx=context;
        this.mParentActivity=act;
    }

    onPostExecute(..){
        mParentActivity.callSomeMethod();
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

我不断得到一个NullPointerException,也许我错过了一些东西,但这对我不起作用.

android asynchronous android-asynctask

4
推荐指数
2
解决办法
1万
查看次数