Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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中实现异步http post请求?_Android_Http_Post_Asynchronous - Fatal编程技术网

如何在android中实现异步http post请求?

如何在android中实现异步http post请求?,android,http,post,asynchronous,Android,Http,Post,Asynchronous,我想在android应用程序中实现以下简单模式: 活动A启动活动B 在活动B中,用户填写一个简单的表格F,然后点击提交 然后,活动B启动一个异步任务C,将F发布到url,并立即返回到活动a 回到活动A中,用户在C仍在工作时继续正常工作。但是一旦C完成,应该通知用户,特别是如果结果是失败 我遇到的问题是步骤3和步骤4。既然C是由B启动的,A如何得到通知?嗯,我不知道除了我以外,其他人是否清楚 不管怎样,现在我遇到了一个解决方案,第3步看起来像这样: 3“.活动B将表单内容返回给活动A。然后,A启动

我想在android应用程序中实现以下简单模式:

  • 活动A启动活动B
  • 在活动B中,用户填写一个简单的表格F,然后点击提交
  • 然后,活动B启动一个异步任务C,将F发布到url,并立即返回到活动a
  • 回到活动A中,用户在C仍在工作时继续正常工作。但是一旦C完成,应该通知用户,特别是如果结果是失败
  • 我遇到的问题是步骤3和步骤4。既然C是由B启动的,A如何得到通知?嗯,我不知道除了我以外,其他人是否清楚

    不管怎样,现在我遇到了一个解决方案,第3步看起来像这样:

    3“.活动B将表单内容返回给活动A。然后,A启动异步任务C发布表单,并照常继续


    但是a也需要处理表单似乎有点不必要,这应该是B的责任。还有其他想法或解决方案吗?

    为什么B不获取运行任务所需的信息,然后将其传递回a?onPreExecute()和onPostExecute()发生在活动a的主线程中


    没关系,我只是在你的描述中看到了这一点。但是是的-B处理所有的事情-A只是将数据提交到URL。

    我会使用广播接收器

    在活动B中

    Intent broadcastIntent = new Intent("com.yourapppackage.BROADCAST");
    broadcastIntent.putExtra("myExtras", myExtras.extra); // Put your results in here
    sendBroadcast(broadcastIntent);
    
    从AsyncTask的onPostExecute启动此命令

    在您的应用程序清单中,向您的活动添加一个意图过滤器,并添加一个条目

    试试这条路。

    是的,最后我想我可以接受。因为表单只是一组字符串对,a真的不需要知道任何关于它的信息。谢谢。我还没有看过广播,只是因为我只有一个接收器,所以看起来有点过火:)
    <activity android:name=".A"
    >
        <intent-filter>
            <action android:name="com.yourapppackage.BROADCAST" />
        </intent-filter>
    </activity>
    
    // Set up a handler and a broadcast reciever
    private final Handler mHandler = new Handler();
    private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
        @Override
            public void onReceive(Context context, Intent intent) {
                // Handle reciever
                String mAction = intent.getAction();
    
                if(mAction.equals("com.yourapppackage.BROADCAST")) {
                // Do something with the results - intent.getExtras();
            }
        }
    }
    
    // Register a reciever
    IntentFilter myRecieverIntentFilter = new IntentFilter();
    myRecieverIntentFilter.addAction("com.yourapppackage.BROADCAST");
    this.registerReceiver(mIntentReceiver, myRecieverIntentFilter, null, mHandler);