5

Я использую parse.com для извлечения данных для использования в моем приложении. Проблема в том, что для загрузки требуется около минуты, и это всего лишь 4 маленьких изображения (380x380) и имя. Вот мой код:Медленный поиск данных с помощью android и parse.com

package com.favega.groups; 

import android.net.Uri; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 

import com.parse.*; 

public class MainActivity extends ActionBarActivity implements CategoryFragment.OnFragmentInteractionListener, EventFragment.OnFragmentInteractionListener{ 

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

     Parse.initialize(this, "xxxxxxxxxxx", "xxxxx"); 
     ParseAnalytics.trackAppOpened(getIntent()); 
     ParseObject.registerSubclass(Category.class); 
     ParseObject.registerSubclass(Event.class); 

     if (savedInstanceState == null) { 
      getSupportFragmentManager().beginTransaction() 
        .add(R.id.container, new CategoryFragment()) 
        .commit(); 
     } 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public void onFragmentInteraction(Uri uri) { 

    } 

    @Override 
    public void onFragmentInteraction(String id) { 

    } 
} 

И мой адаптер:

package com.favega.groups; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Typeface; 
import android.graphics.drawable.ColorDrawable; 
import android.os.Bundle; 
import android.support.v4.app.FragmentTransaction; 
import android.text.method.CharacterPickerDialog; 
import android.util.Log; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Filter; 
import android.widget.Filterable; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.parse.FindCallback; 
import com.parse.ParseException; 
import com.parse.ParseObject; 
import com.parse.ParseQuery; 
import com.parse.ParseQueryAdapter; 
import com.squareup.picasso.Picasso; 

import java.io.File; 
import java.util.ArrayList; 
import java.util.List; 

public class CategoryAdapter extends ParseQueryAdapter<Category>{ 

    MainActivity mContext; 

    public CategoryAdapter(Context context) { 
     super(context, "Category"); 
     this.mContext = (MainActivity) context; 
    } 

    @Override 
    public final View getItemView(final Category object, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = ((Activity) mContext).getLayoutInflater().inflate(R.layout.category, parent, false); 
     } 
     TextView categoryName = (TextView) convertView.findViewById(R.id.categoryName); 
     categoryName.setText(object.getName()); 
     categoryName.setTypeface(Typeface.createFromAsset(mContext.getAssets(), "fonts/Roboto-Light.ttf")); 
     final TextView eventNum = (TextView) convertView.findViewById(R.id.eventNum); 
     eventNum.setTypeface(Typeface.createFromAsset(mContext.getAssets(), "fonts/Roboto-Light.ttf")); 
     ParseQuery<Event> query = ParseQuery.getQuery("Event"); 
     query.whereEqualTo("parent", object); 
     query.findInBackground(new FindCallback<Event>() { 
      @Override 
      public void done(List<Event> events, ParseException e) { 
       eventNum.setText(events.size() + " " + mContext.getString(R.string.events)); 
       notifyDataSetChanged(); 
      } 
     }); 

     SquareImageView imageView = (SquareImageView) convertView.findViewById(R.id.image); 
     Picasso.with(mContext).load(object.getImage().getUrl()).placeholder(new ColorDrawable(object.getColor())).into(imageView); 
     convertView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       FragmentTransaction fragmentTransaction = mContext.getSupportFragmentManager().beginTransaction(); 
       Bundle args = new Bundle(); 
       args.putString("ARGS_CATEGORY", object.getName()); 
       EventFragment eventFragment = new EventFragment(); 
       eventFragment.setArguments(args); 
       fragmentTransaction.replace(R.id.container, eventFragment); 
       fragmentTransaction.addToBackStack(null); 
       fragmentTransaction.commit(); 
      } 
     }); 
     return convertView; 
    } 
} 
+1

i face same issue didi вы нашли решение для этого? – FarOoOosa

ответ

0

Более простой способ получения изображений внутри разборе будет следующим:

for(ParseObject obj : objects) 
{ 
    ParseFile file = obj.getParseFile("Column_Name"); 
    try 
    { 
     Bitmap bit = BitmapFactory.decodeByteArray(file.getData(),0,file.getData().length); 
    } 
    catch(ParseException e1) 
    {} 
} 

Это помогает мне загрузить изображения быстрее. Я бы рекомендовал разместить это внутри Asynctask

 Смежные вопросы

  • Нет связанных вопросов^_^