package com.example.avoscloud_demo; import android.os.AsyncTask; import com.avos.avoscloud.*; import junit.framework.Assert; import java.util.List; import java.util.Random; public class QueryDemoActivity extends DemoBaseActivity { static private final String BASIC_QUERY = "basic_query"; static private final String USER_QUERY = "user_query"; private class QueryTask extends AsyncTask<String, Void, Void> { volatile private String message = null; volatile private Exception exception = null; @Override protected Void doInBackground(String ... params) { message = params[0]; String type = params[1]; try { if (BASIC_QUERY.equals(type)) { QueryDemoActivity.this.objectQueryImpl(); } else if (USER_QUERY.equals(type)) { QueryDemoActivity.this.userQueryImpl(); } } catch (Exception e) { exception = e; exception.printStackTrace(); } return null; } @Override protected void onPostExecute(Void result) { QueryDemoActivity.this.showMessage(message, exception, false); } @Override protected void onPreExecute() { } @Override protected void onProgressUpdate(Void... values) { } } public static String getRandomString(int length) { String letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; StringBuilder randomString = new StringBuilder(length); for (int i = 0; i < length; i++) { randomString.append(letters.charAt(new Random().nextInt(letters.length()))); } return randomString.toString(); } private void userQueryImpl() throws Exception { String lastString = null; // signup some test user for(int i = 0; i < 10; ++i) { AVUser user = new AVUser(); user.setUsername(getRandomString(10)); user.setPassword(getRandomString(10)); user.signUp(); Assert.assertFalse(user.getObjectId().isEmpty()); lastString = user.getUsername(); } AVQuery currentQuery = AVUser.getQuery(); AVQuery innerQuery = AVUser.getQuery(); innerQuery.whereContains("username", lastString); currentQuery.whereMatchesKeyInQuery("username", "username", innerQuery); List<AVUser> users = currentQuery.find(); Assert.assertTrue(users.size() == 1); for(AVUser resultUser : users) { Assert.assertTrue(resultUser.getUsername().equals(lastString)); } } private void objectQueryImpl() throws Exception { AVObject person1 = AVObject.create("Person"); person1.put("gender", "Female"); person1.put("name", "Cake"); person1.save(); AVObject person2 = AVObject.create("Person"); person2.put("gender", "Male"); person2.put("name", "Man"); person2.save(); AVObject something = AVObject.create("Something"); something.put("belongTo", "Cake"); something.put("city", "ChangDe"); something.save(); AVObject another = AVObject.create("Something"); another.put("belongTo", "Man"); another.put("city", "Beijing"); another.save(); AVQuery q1 = AVQuery.getQuery("Person"); q1.whereEqualTo("gender", "Female"); AVQuery q2 = AVQuery.getQuery("Something"); q2.whereMatchesKeyInQuery("belongTo", "name", q1); List<AVObject> objects = q2.find(); Assert.assertTrue(objects.size() > 0); for (AVObject obj : objects) { Assert.assertTrue(obj.getString("belongTo").equals("Cake")); } AVQuery q3 = AVQuery.getQuery("Something"); q3.whereDoesNotMatchKeyInQuery("belongTo", "name", q1); List<AVObject> list = q3.find(); Assert.assertTrue(list.size() > 0); for (AVObject obj : list) { Assert.assertFalse(obj.getString("belongTo").equals("Cake")); } } // create an object and query it. public void testObjectQuery(final String string) throws AVException { QueryTask task = new QueryTask(); task.execute(BASIC_QUERY, string); } public void testUserQuery(final String string) throws AVException { QueryTask task = new QueryTask(); task.execute(USER_QUERY, string); } }