Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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
Java 正在尝试决定Android连接到web服务时使用哪种方法_Java_Android_Multithreading_Web Services - Fatal编程技术网

Java 正在尝试决定Android连接到web服务时使用哪种方法

Java 正在尝试决定Android连接到web服务时使用哪种方法,java,android,multithreading,web-services,Java,Android,Multithreading,Web Services,我在这个网站上读过几篇文章,还有几本关于处理程序、线程、HandlerThreads、服务、SyncAdapters、ContentProviders等的书。似乎有很多不同的选择,我不知道哪一个适合我的项目 我有一个简单的项目,当应用程序第一次启动时,它将连接到一个简单的RESTWeb服务。它将下载一些JSON数据并在列表中显示。然后,用户可以编辑这些数据,点击“保存”后,应用程序将向web服务发送一篇包含更新数据的帖子。用户还可以手动启动“同步”,以检查任何新数据。最后,应用程序应该定期检查w

我在这个网站上读过几篇文章,还有几本关于处理程序、线程、HandlerThreads、服务、SyncAdapters、ContentProviders等的书。似乎有很多不同的选择,我不知道哪一个适合我的项目

我有一个简单的项目,当应用程序第一次启动时,它将连接到一个简单的RESTWeb服务。它将下载一些JSON数据并在列表中显示。然后,用户可以编辑这些数据,点击“保存”后,应用程序将向web服务发送一篇包含更新数据的帖子。用户还可以手动启动“同步”,以检查任何新数据。最后,应用程序应该定期检查web服务,看看是否有更多数据

我从一家内容提供商开始,但它似乎真的有些过火(而且很复杂),尽管我相信它最终会奏效。然后我尝试了一个线程,但Android建议使用AsyncTask或处理程序。我一直在和他们玩(把他们放到服务中),他们都会做我想做的事情(使用计时器每X分钟启动一次同步),但我不知道这是否是最好的处理方法。我很担心,因为这个项目可能会包含更多的内容,我不想选择一个会限制我未来发展的选项,但我也不想把大量的时间花在一些过分的事情上


有人能帮忙吗?

让我们从“保持简单”的整体范例开始

AsyncTask应该是这样的:

public class MyAsyncTask extends AsyncTask<Void, Void, Data> {

   public interface OnDone {
      public void onDone(Data data);
   }

   private final OnDone mDone;

   public MyAsyncTask(OnDone onDone) {
      mDone = onDone;
   }

   public Data doInBackground(Void v) {
      // Download and parse your JSON in the background
   }

   public void onPostExecute(Data data) {
        mOnDone.onDone(data);
   }

}

public class OnDoneImpl .... implements OnDone, Runnable {

    ...
    // Just need a context in scope some how, an activity, the application whatever.
    Context mContext;

    public void onDone(Data data) {
        updateList(data);
        scheduleAgainInXMinutes(TIME_TILL_REFRESH);
    }

    public void scheduleAgainInXMinutes(long millis) {
        // probably want to use an Alarm service but can always use a handler;
        new Handler().postDelayed(this, millis);   
    }

    public void run() {
          new MyAsyncTask(this).execute();
    }
}
公共类MyAsyncTask扩展了AsyncTask{
公共接口OnDone{
公用电话(数据);
}
私人终审法院一审一审;
公共MyAsyncTask(OnDone OnDone){
mDone=onDone;
}
公共数据背景(Void v){
//在后台下载并解析JSON
}
public void onPostExecute(数据){
mOnDone.onDone(数据);
}
}
公共类OnDoneImpl。。。。实现OnOne,可运行{
...
//只是需要一个范围内的上下文,一个活动,一个应用程序等等。
语境;
公用电话(数据){
更新列表(数据);
ScheduleAgininxMinutes(刷新前的时间);
}
公共无效计划AgaininxMinutes(长毫秒){
//可能想使用报警服务,但可以始终使用处理程序;
new Handler().postDelayed(这个,毫秒);
}
公开募捐{
新建MyAsyncTask(this.execute();
}
}

使用+1。AsyncTask为您完成所有繁重的工作。这是一个很好的例子