Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.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 截击请求太慢_Java_Android_Http_Android Volley - Fatal编程技术网

Java 截击请求太慢

Java 截击请求太慢,java,android,http,android-volley,Java,Android,Http,Android Volley,当我设置适配器时,我的应用程序崩溃了,因为images ArrayList是空的。我发现在解析JSON请求后立即发送一条toast消息,在初始化适配器后发送一条toast消息,“second”首先出现在屏幕上,然后应用程序崩溃,这与我的互联网有关吗?或者我遗漏了什么,这是我的密码,谢谢 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

当我设置适配器时,我的应用程序崩溃了,因为images ArrayList是空的。我发现在解析JSON请求后立即发送一条toast消息,在初始化适配器后发送一条toast消息,“second”首先出现在屏幕上,然后应用程序崩溃,这与我的互联网有关吗?或者我遗漏了什么,这是我的密码,谢谢

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_page);
    mViewPager = (ViewPager) findViewById(R.id.view_pager);

    mVolleySingleton = VolleySingleton.getInstance();
    mRequestQueue = mVolleySingleton.getRequestQueue();

    //First Toast message inside this method 
    sendAPIRequest();

    //after you get the images
    mCustomSwipeAdapter = new CustomSwipeAdapter(this, images);

    //SECOND TOAST
    Toast.makeText(getApplicationContext(), "Second", Toast.LENGTH_LONG).show();
    mViewPager.setAdapter(mCustomSwipeAdapter);

    mCustomSwipeAdapter.notifyDataSetChanged();

}

public void sendAPIRequest(){
    String requestURL = "";
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, requestURL, (String) null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            parseJSONResponse(response);

            //FIRST TOAST : SHOULD BE CALLED FIRST
            Toast.makeText(getApplicationContext(), "First", Toast.LENGTH_LONG).show();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

        }
    });

    mRequestQueue.add(jsonObjectRequest);
}

public void parseJSONResponse(JSONObject response) {
    if (response != null || response.length() != 0) {
        try {
            JSONObject GObject = response.getJSONObject("game");
            String name = "N/A";
            if (GObject.has("name") && !GObject.isNull("name")) { name = GObject.getString("name"); }

            if (GObject.has("screenshots") && !GObject.isNull("screenshots")) {
                JSONArray screenShotsArray = GObject.getJSONArray("screenshots");
                for (int i = 0; i < screenShotsArray.length(); i++){
                    JSONObject screenshot = screenShotsArray.getJSONObject(i);
                    String screenshotURL = screenshot.getString("url");

                    images.add(screenshotURL);
                }
            }


        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_页面);
mViewPager=(ViewPager)findViewById(R.id.view\u pager);
mVolleySingleton=VolleySingleton.getInstance();
mRequestQueue=mVolleySingleton.getRequestQueue();
//此方法中的第一条Toast消息
sendAPIRequest();
//在你得到图像之后
MCCustomsWipeAdapter=新的CustomSwipeAdapter(此为图像);
//再祝酒
Toast.makeText(getApplicationContext(),“Second”,Toast.LENGTH_LONG.show();
mViewPager.setAdapter(mCustomSwipeAdapter);
mcustomsweepadapter.notifyDataSetChanged();
}
public void sendAPIRequest(){
字符串requestURL=“”;
JsonObjectRequest JsonObjectRequest=新的JsonObjectRequest(Request.Method.GET,requestURL,(String)null,新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
parseJSONResponse(response);
//第一个祝酒词:应该叫第一个
Toast.makeText(getApplicationContext(),“First”,Toast.LENGTH_LONG.show();
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
});
添加(jsonObjectRequest);
}
公共void parseJSONResponse(JSONObject响应){
if(response!=null | | response.length()!=0){
试一试{
JSONObject GObject=response.getJSONObject(“游戏”);
String name=“不适用”;
if(GObject.has(“name”)&&!GObject.isNull(“name”){name=GObject.getString(“name”)}
if(GObject.has(“屏幕截图”)&&!GObject.isNull(“屏幕截图”)){
JSONArray屏幕快照sarray=GObject.getJSONArray(“屏幕快照”);
对于(int i=0;i
这和我的互联网有关吗?还是我错过了什么

两者都有。这是因为你有比赛条件

据我所知,您的
images
列表正在由
onResponse
回调异步填充。基本上,当你的应用程序收到它发出的API请求的响应时,就会发生这种情况。这至少需要几毫秒,可能需要几秒钟(或更长)

但是你的应用程序(你这么说)在刷卡适配器注册后很快就崩溃了,有证据表明,
images
列表尚未填充

有三种可能性:

  • 您发送的请求有问题,导致API请求没有给您任何响应。(假设您的身份验证可能有误或其他原因。)

  • 由于internet连接速度快、拥塞或远程服务器速度慢,API请求需要很长时间

  • API请求需要很短的时间。。。但是适配器注册速度更快

如果(假设)您的请求存在问题,您需要解决该问题。但其他两种情况必须通过以下方式解决:

  • 如果没有图像(尚未),修改使用图像正常工作的代码,或者

  • 修改代码以等待映像加载完成后再注册适配器


请在onResponse回调中使用此代码:

//after you get the images
mCustomSwipeAdapter = new CustomSwipeAdapter(this, images);

//SECOND TOAST
Toast.makeText(getApplicationContext(), "Second", Toast.LENGTH_LONG).show();
mViewPager.setAdapter(mCustomSwipeAdapter);

mCustomSwipeAdapter.notifyDataSetChanged();

Volley会将您的请求添加到队列中,因此最好只在响应或错误回调中执行所有相关任务。

谢谢,我的internet没有问题,我在成功加载后将适配器设置为我的ViewPager,并且100%确定onResponse会返回我想要的,在本例中为JSON。因此,我设置适配器并通知数据的代码已更改;我在完成解析后立即移动了它,所以在我的parseJSONResponse中,方法,谢谢!