2017-01-16 61 views
-1

我试图检索我的Android应用程序中存储在数据库中的表单数据列表。数据库的每一行都包含一些字符串格式的个人信息以及该人员的图像。我已将图像以MEDIUMBLOB格式存储在数据库中。使用Android Volley库从MySQL数据库中检索数据太慢

每当我尝试在我的Android应用中使用Volley Library的JSONObjectrequest从我的服务器检索数据时,响应通常非常缓慢。有时,只需要1分钟时间查看从数据库中检索到的10到12行。 这是我的logcat:

D/Volley: [337] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] http://helpclick.ahsanaasim.me/v1/tasksall/johny 0xa3e020c1 NORMAL 1> [lifetime=14740],

我试图寻找一个完美的解决方案,但我无法找到任何令人满意。这是我的Java代码:

 mRequestStartTime = System.currentTimeMillis(); 
     JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, 
       showUrl2, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       long totalRequestTime = System.currentTimeMillis() - mRequestStartTime; 
       System.out.println(totalRequestTime); 
       System.out.println(response.toString()); 
       try { c1++; 

        System.out.println(c1); 
        JSONArray incidents = response.getJSONArray("incidents"); 
        for (int i = 0; i < incidents.length(); i++) { 
         e=0; 
         JSONObject incident = incidents.getJSONObject(i); 
         c1++; 
         id= incident.getString("id"); 
         age = incident.getString("age"); 

         gender = incident.getString("gender"); 
         location = incident.getString("location"); 
         //det= incident.getString("det"); 

         String image=new String(); 
         image = incident.getString("bigimage"); 

         if(image.length()!=0) { 
          myBitmap = ConvertToImage(image); 
          Bitmap bitmap= Bitmap.createScaledBitmap(myBitmap,500,500,true); 

          imgs.add(bitmap); 
          ages.add(age); 
          genders.add(gender); 
          locations.add(location); 
          ids.add(id); 
         } 
        } 
        if(c1>0) { 
         System.out.println(ages.size()); 
         Intent intent1 = new Intent(search_buttons_page.this, All_Incidents.class); 
         startActivity(intent1); 
        } 
       } 
       catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       System.out.append(error.getMessage()); 

      } 
     }); 
     jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(
       20000, 
       DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
       DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

     requestQueue.add(jsonObjectRequest); 

这将是非常有益的,如果有人能告诉我这种性能下降的原因,以及如何在我的源代码进行很少的改动来解决这个问题。

+0

数据库中的斑点的范围和平均大小是多少?如果您从笔记本电脑/台式机上抓取它们,抓取端点的速度是否会变慢? – halfer

回答

2

不要将图像保存在数据库中。将它们保存在文件中,并将文件的URL保存在数据库中。通过URL根据需要分别下载图像。然后,你不会用文件IO来杀死你的数据库访问时间。

+0

谢谢您的建议。我需要一些澄清。大多数专家建议使用文件系统在db中存储图像。但是,据我所知,当数据库中有成千上万行时会出现这种情况。现在,我的数据库只包含20-30行数据。为什么即使有如此多的数据解析,该过程也会显着减慢? – lordsm068

+0

甚至20-30也太多了,尤其是考虑到你的Android实现。你在内存中存储20-30位图图像。你会很快做到这一点。在服务器端 - 你还没有发布你的服务器代码。它有可能你有其他问题。但是,发送20-30张图像所需的时间(从数据库到Web服务,从Web服务到客户端)可能会很重要。 –