Articles of http

当多个请求发送到服务器时,Okhttp刷新过期令牌

我有一个ViewPager并且在同时加载ViewPager时会进行三次webservice调用。 当第一个返回401时,将调用Authenticator并在Authenticator刷新令牌,但剩余的2个请求已经发送到具有旧刷新令牌的服务器,并且失败,498在Interceptor中捕获并且app被注销。 这不是我期望的理想行为。 我想将第二个和第三个请求保留在队列中,并在刷新令牌时重试排队的请求。 目前,我有一个variables来指示在Authenticator是否正在进行令牌刷新,在这种情况下,我取消了Interceptor中的所有后续请求,用户必须手动刷新页面,否则我可以注销用户并强制用户登录。 使用okhttp 3.x for Android的上述问题有什么好的解决方案或架构? 编辑:我想要解决的问题一般,我不想对我的电话进行排序。 即等待一个调用完成并刷新令牌,然后仅在活动和片段级别上发送其余请求。 代码被要求。 这是Authenticator的标准代码: public class CustomAuthenticator implements Authenticator { @Inject AccountManager accountManager; @Inject @AccountType String accountType; @Inject @AuthTokenType String authTokenType; @Inject public ApiAuthenticator(@ForApplication Context context) { } @Override public Request authenticate(Route route, Response response) throws IOException { // Invaidate authToken String accessToken = accountManager.peekAuthToken(account, authTokenType); […]

如何恢复中断下载

我正试图从我的Yahoo!下载一个大文件 网站服务器显然是设置(不是由我)断开下载,如果他们没有在100秒内完成。 该文件足够小,通常可以成功传输。 在数据速率较慢且下载断开的情况下,有没有办法在发生断开连接的文件偏移处恢复URLConnection? 这是代码: // Setup connection. URL url = new URL(strUrl[0]); URLConnection cx = url.openConnection(); cx.connect(); // Setup streams and buffers. int lengthFile = cx.getContentLength(); InputStream input = new BufferedInputStream(url.openStream()); OutputStream output = new FileOutputStream(strUrl[1]); byte data[] = new byte[1024]; // Download file. for (total=0; (count=input.read(data, 0, 1024)) != -1; total+=count) { publishProgress((int)(total*100/lengthFile)); […]

流式传输到Android MediaPlayer

我正在尝试在我的应用程序中编写一个轻量级HTTP服务器,以feed动态生成的MP3数据提供给内置的Android MediaPlayer 。 我不允许将我的内容存储在SD card 。 我的输入数据基本上是无限长度的。 我告诉MediaPlayer它的数据源基本上应该是”http://localhost/myfile.mp3″ 。 我有一个简单的服务器设置,等待MediaPlayer发出此请求。 但是, MediaPlayer并不是很合作。 首先,它进行HTTP GET并尝试获取整个文件。 如果我们尝试简单地将数据转储到socket那么我们尝试使用HTTP Range标头以块的forms写入数据。 MediaPlayer不喜欢这样,并且不会继续请求后续的块。 有没有人有成功的数据直接流入MediaPlayer ? 我需要实现RTSP或Shoutcast服务器吗? 我只是错过了一个关键的HTTP header ? 我应该在这里使用什么策略?

错误java.lang.RuntimeException:Stub! 在Android中使用Fitnesse测试

我正在尝试使用Fitnesse框架创建一个测试夹具,我想测试一个从服务器检索数据的函数(RESTFUL服务)。 我的测试用例非常简单: public class FriendListActivityFixture extends ColumnFixture { public int URL; public String test() { JSONArray array = JsonHelper.getJsonArrayFromUrl(“http://107.22.209.62/android/get_users.php”); return array.toString(); } } public static JSONArray getJsonArrayFromUrl(String url) { InputStream input = null; String result = “”; JSONArray jsonArray = null; try { HttpClient httpclient = CustomHttpClient.getHttpClient(); HttpPost httppost = new HttpPost(url); HttpResponse response = […]

Android WebView是否需要打开外部URL的权限?

我正在尝试以下示例,但使用外部URL: 使用WebViews 该示例显示如何从assets文件夹( file:// url )加载HTML文件并将其显示在WebView中。 但是,当我尝试使用外部url(如http://google.com )时,我总是收到“网站不可用”错误。 Android的内置浏览器可以访问所有外部URL。 我怀疑它与权限有关,但无法确认。

如何拦截android webview中的POST数据

我有一个由webview组成的Android应用程序。 它需要允许用户在网页上填写表单,然后在用户单击submit上的submit后更改表单的数据。 表单将使用POST请求方法。 所以我的问题是, 我如何拦截表单中的POST数据,更改它的值,然后发送它? 例如:如果有这样的Web表单…… 如果用户在表单中输入name = Steve和email = steve@steve.com,我想在Android应用程序中将值更改为name = bob和email = bob@bob.com并将新POST发送到http://www.example.com/do.php 。 谢谢你的帮助!

使用Volley发送post请求并以PHP格式接收

我试图在我的项目中使用volley来处理我的所有HTTP请求,因为据我所知它是最有效的。 所以我开始通过AndroidHive教程学习排球。 我的第一个GET请求成功了。 然后我转到POST请求,但我失败了。 我在Stack Overflow上看到很多人在将截击请求与PHP结合起来时遇到了问题。 我相信我们无法使用$_POST[“”]的常规方式访问它,因为齐射将JSON对象发送到我们指定的URL。 我尝试了许多解决方案,但没有成功。 我想应该有一个简单而标准的方法来使用PHP的凌空。 所以我想知道在我的PHP代码中接收volley发送的json对象需要做什么。 还有我如何检查凌空是否真的发送JSON对象? 我的凌空代码发送简单的post请求: JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST, url, null, new Response.Listener() { @Override public void onResponse(JSONObject response) { Log.d(TAG, response.toString()); pDialog.hide(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.d(TAG, “Error: ” + error.getMessage()); pDialog.hide(); } }) { @Override protected Map getParams() […]

低API下的StandardCharsets.UTF_8低于19

我正在使用此代码将斯堪的纳维亚字符正确发布到php。 这里的问题是API 19之前不支持StandardCharsets.UTF_8 byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8); DataOutputStream wr = new DataOutputStream( con.getOutputStream()); wr.write( postData ); 字段需要API级别19(当前最小值为14):java.nio.charset.StandardCharsets #UTF_8 我应该如何使用低于19的API?

Android HTTP连接被拒绝

我试图通过WiFi从Android设备访问本地Web服务器,我可以通过浏览器从我的笔记本电脑访问,或使用curl。 我也可以在Android设备浏览器上访问服务器。 我用来访问服务器的代码产生“连接被拒绝”exception。 这是代码: public void getController1() { HttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet(“http://192.168.1.169:8000”); HttpResponse response = null; System.out.println(httpget.toString()); try { response= httpclient.execute(httpget); txtViewStatus.setText(“Controller 1 – OK”+response); } catch(Exception e) { e.printStackTrace(); txtViewStatus.setText(“Controller 1 – Error”+e); } }

在Android WebView中获取HTTP状态代码

我正在开发一个在WebView中加载网站的Android应用程序,但有时网站会返回HTTP代码500。 我的问题是:有没有办法从带有监听器或其他类的WebView获取HTTP状态代码? 我试图实现一个WebViewClient,但是我无法获得WebView收到的HTTP状态代码。