当前位置: 首页 > 知识库问答 >
问题:

OkHttp3正在返回超时异常

阎丰羽
2023-03-14
public class Activity2 extends AppCompatActivity {

ListView listView;
List<Data> places;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_2);

    listView  = findViewById(R.id.listView);
    places = new ArrayList<>();

    final ProgressDialog prg = new ProgressDialog(Activity2.this);
    prg.setMessage("Loading...");
    prg.show();

    Log.d("OnCreate","Oncreate started");

    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder().url("https://tiffino.herokuapp.com/test").build();

    client.newCall(request).enqueue(new Callback() {

        @Override
        public void onFailure(Call call, final IOException e) {

            prg.dismiss();

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(getApplicationContext(),""+e.getMessage(),Toast.LENGTH_SHORT).show();
                }
            });
        }

        @Override
        public void onResponse(Call call, final Response response) throws IOException {

            prg.dismiss();

            runOnUiThread(new Runnable() {
                @Override
                public void run() {

                    try {
                        JSONArray arr = new JSONArray(response.body().string());

                        for(int i = 0;i < arr.length();i++){

                            JSONObject obj = arr.getJSONObject(i);

                            String str1 = obj.getString("Name");

                            Data data = new Data(str1);

                            places.add(data);

                        }

                        PlacesAdapter adapter=  new PlacesAdapter(places,getApplicationContext());
                        listView.setAdapter(adapter);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
        }

    });

   }
} 
public class PlacesAdapter extends ArrayAdapter<Data> {

private List<Data>  places;
private Context ctx;

public PlacesAdapter( List<Data> places, Context ctx) {
    super(ctx,R.layout.places_row,places);
    this.places = places;
    this.ctx = ctx;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

    LayoutInflater inflater = LayoutInflater.from(ctx);

    View listView = inflater.inflate(R.layout.places_row,null,true);

    TextView txt = listView.findViewById(R.id.txt);

    Data data = places.get(position);

    txt.setText(data.getPlace());

    return listView;

  }
}

共有1个答案

秦胡媚
2023-03-14

如果您的服务器速度慢,或者您的服务器的默认超时时间很少,则会发生服务器超时。

在这种情况下,您可以为您的请求设置超时,如下所示

client.setConnectTimeout(35, TimeUnit.SECONDS); //change timeout according to your server needs
client.setReadTimeout(35, TimeUnit.SECONDS);
client.setWriteTimeout(35, TimeUnit.SECONDS);

如果您使用的是OkHttp3,那么您可以使用构建器来完成这个任务,如下所示。

client = new OkHttpClient.Builder()
        .connectTimeout(30, TimeUnit.SECONDS)
        .writeTimeout(30, TimeUnit.SECONDS)
        .readTimeout(30, TimeUnit.SECONDS)
        .build();
 类似资料:
  • 有很多使用OkHTTP3发出请求的例子,但是,我仍然无法发出正确的请求。据我所知,我的设置是正确的。 我不断收到如下所示的回复。我不知道他们是什么意思。 {“ContentLength”:238,“ContentTypeString”:“Application/JSON”,“Source”:{“Buffer”:{“Size”:0},“Closed”:False,“Source”:{“BytesRe

  • 我也没有在AWS文档中找到任何实质性的东西。

  • 问题内容: 我很难理解通过AJAX动态获取代码并通过执行代码时如何处理异常。使用客户端javascript,如果我有一段这样的代码,这相当简单 这将引发异常,因为类型为的没有。此外,引发的异常非常容易理解。 现在,将上面的代码放入一个文本文件中,进行调用,并将其存储在服务器上。现在让我们使用Ajax动态加载它。我正在使用以下代码动态加载它 这是一个非常基本的php脚本,用于加载文件并将其作为jav

  • 我已经使用zappa在aws lambda上部署了一个flask应用程序,现在该应用程序在所有endpoint上都运行良好,除了我的主endpoint,当我对其发出post请求时,它返回{“消息”:“endpoint请求超时”} 真的需要一个修复或想法如何克服这个我需要调用分析路线,部署的url是 https://2ixfyfcsik.execute-api.eu-west-2.amazonaws

  • 代码activity_lastcall.xml: 代码lastcall.java: 代码AndroidManifest.xml: 我需要得到最后一个电话,并在TextView中写入号码和姓名。

  • 问题内容: 首先,我已经阅读了很多关于我的问题的问题,但是它从来没有 给我解决方案。以下是一些有关 问题: 我在Web服务应用程序中使用Okhhtp3库。它工作 正常,但是当互联网连接速度慢或连接不可靠时,它就卡住了 ,永远不会超时,也永远不会调用超时异常或失败方法。 这是客户端代码: 20秒后如何获取超时异常或调用失败方法? Thanks 问题答案: 正如Trevor Halvorson指出的那