Android 多对多关系

Android 多对多关系,android,parse-platform,Android,Parse Platform,我在Parse.com上有两个类:Image和Data。在数据类中,我保存了三个字段:姓名、手机号码和职业。在图像类中,我正在保存图像 我必须在这两个类之间创建关系,以便我可以获取具有相应手机号码的图像。一个手机号码可以保存多个图像,表格数据可以有多个手机号码 无法找到如何使用特定手机号码获取图像。请帮助我,因为我已经看完了文档。提前谢谢。这是我的密码: public class GetImage extends Activity { // Declare Variables GridView

我在Parse.com上有两个类:Image和Data。在数据类中,我保存了三个字段:姓名、手机号码和职业。在图像类中,我正在保存图像

我必须在这两个类之间创建关系,以便我可以获取具有相应手机号码的图像。一个手机号码可以保存多个图像,表格数据可以有多个手机号码

无法找到如何使用特定手机号码获取图像。请帮助我,因为我已经看完了文档。提前谢谢。这是我的密码:

public class GetImage extends Activity {
// Declare Variables
GridView gridview;
List<ParseObject> ob;
ProgressDialog mProgressDialog;
GridViewAdapter adapter;
Button imgbtn;
EditText mbltxt;
String mobileNumber;
private List<PhoneList> phonearraylist = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Get the view from gridview_main.xml
    setContentView(R.layout.listview_main);
    // Execute RemoteDataTask AsyncTask
    imgbtn=(Button) findViewById(R.id.imgbtn);
    mbltxt = (EditText) findViewById(R.id.mbltxt);

    imgbtn.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

                if (mbltxt.getText().toString().equals("")) {
                    Toast.makeText(getBaseContext(), "Please enter a valid mobilenumber", Toast.LENGTH_LONG).show();    
                }else {
             new RemoteDataTask().execute();
        } 
        }
    });       
}
公共类GetImage扩展活动{
//声明变量
GridView;
列表ob;
进程对话框;
GridViewAdapter;
按钮imgbtn;
编辑文本mbltxt;
字符串移动枚举器;
私有列表phonearraylist=null;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//从gridview_main.xml获取视图
setContentView(R.layout.listview_main);
//执行RemoteDataTaskAsyncTask
imgbtn=(按钮)findViewById(R.id.imgbtn);
mbltxt=(EditText)findViewById(R.id.mbltxt);
imgbtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
if(mbltxt.getText().toString().equals(“”){
Toast.makeText(getBaseContext(),“请输入有效的mobilenumber”,Toast.LENGTH_LONG.show();
}否则{
新建RemoteDataTask().execute();
} 
}
});       
}
询问手机号码后,单击getImage按钮查询该手机号码的所有图像

// RemoteDataTask AsyncTask
private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Create a progressdialog
        mProgressDialog = new ProgressDialog(GetImage.this);
        // Set progressdialog title
        mProgressDialog.setTitle("Images");
        // Set progressdialog message
        mProgressDialog.setMessage("Loading...");
        mProgressDialog.setIndeterminate(false);
        // Show progressdialog
        mProgressDialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        // Create the array
        phonearraylist = new ArrayList<PhoneList>();
        try {
            // Locate the class table named "Image" in Parse.com
            ParseRelation<ParseObject> relation = currentUser.getRelation("img");
            ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Image");

            ob = query.find();
            for (ParseObject imgob : ob) {
                ParseFile image = (ParseFile) imgob.get("ImageFile");
                PhoneList map = new PhoneList();
                map.setPhone(image.getUrl());
                phonearraylist.add(map);
            }
         }catch (ParseException e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        // Locate the gridview in gridview_main.xml
        gridview = (GridView) findViewById(R.id.gridview);
        // Pass the results into ListViewAdapter.java
        adapter = new GridViewAdapter(GetImage.this,
                phonearraylist);
        // Binds the Adapter to the ListView
        gridview.setAdapter(adapter);
        // Close the progressdialog
        mProgressDialog.dismiss();
    }
}}
//RemoteDataTask异步任务
私有类RemoteDataTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//创建一个progressdialog
mProgressDialog=newprogressdialog(GetImage.this);
//设置进程对话框标题
mProgressDialog.setTitle(“图像”);
//设置进程对话框消息
设置消息(“加载…”);
mProgressDialog.setUndeterminate(false);
//显示进度对话框
mProgressDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…参数){
//创建数组
phonearraylist=新的ArrayList();
试一试{
//在Parse.com中找到名为“Image”的类表
ParseRelation=currentUser.getRelation(“img”);
ParseQuery=新的ParseQuery(“图像”);
ob=query.find();
for(ParseObject imgob:ob){
ParseFile image=(ParseFile)imgob.get(“ImageFile”);
PhoneList映射=新建PhoneList();
map.setPhone(image.getUrl());
添加(映射);
}
}捕获(解析异常){
Log.e(“Error”,e.getMessage());
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
//在gridview_main.xml中找到gridview
gridview=(gridview)findViewById(R.id.gridview);
//将结果传递到ListViewAdapter.java中
adapter=新的GridViewAdapter(GetImage.this,
音素列表);
//将适配器绑定到ListView
setAdapter(适配器);
//关闭progressdialog
mProgressDialog.disclose();
}
}}

我不能确切地告诉您代码,但是从数据库的角度来看,使用多对多关系的表不是一个好主意。要解决多个关系,您必须按如下方式打破这些关系:


one->many我不是安卓开发者,但我会尝试使用这一款。您有两个类,数据和图像。每个数据实例都可以关联到许多图像。使每个数据实例唯一的信息是名为Mobile Number的属性

您有三种选择: 1.Parse.com数组 2.Parse.com关系 3.关联类(如Waquas所建议的)

  • 如果一个数据实例链接到的图像少于大约50个,则Parse.com数组是一个很好的解决方案。将图像与数据关联时,请使用Parse.com“add”方法:
  • 可以一次性关联图像列表:

    从parse中检索数据实例时,图像对象显示为“指针”数组。要拉回实际的图像对象,请使用“fetch”。有关如何使用fetch的示例,请查看Parse.com文档的以下部分:

    默认情况下,在获取对象时,相关的ParseObject不会被删除 取来。这些对象的值只有在 我是这样被抓到的:

    fetchedComment.getParseObject(“post”)
    .fetchIfNeededInBackground(新的GetCallback(){
    公共无效完成(ParseObject对象,parsee异常){
    字符串标题=post.getString(“标题”);
    }
    }); 
    
  • Parse.com关系比数组解决方案更具可扩展性。如果单个数据与数百或数千个图像关联,则这是正确的解决方案。我已经开始在自己的代码中将数组切换为关系
  • ParseRelation=aData.getRelation(“图像”); 添加(someImageObject); aData.saveInBackground();
  • 如果有关于数据和图像之间关系的额外信息,例如,如果用户可以将图像标记为“我的最爱之一”,则关联类是一个很好的解决方案。要解决此问题,请在Parse.com中创建一个名为ImageAssociation的新类。该类有三个属性:

    • 数据对象(或仅数据对象的手机号码)
    • 图像对象
    • isFavorite(对或错)
  • 我将不讨论这个解决方案的机制。跟随h中的Waquas链接
    aData.add("images", someImageObject);
    aData.saveInBackground();
    
    aData.addAll("images", Arrays.asList(image1, image2, image3));
    
    fetchedComment.getParseObject("post")
        .fetchIfNeededInBackground(new GetCallback<ParseObject>() {
            public void done(ParseObject object, ParseException e) {
              String title = post.getString("title");
            }
        }); 
    
    ParseRelation relation = aData.getRelation("images"); relation.add(someImageObject); aData.saveInBackground();