2014-01-14 173 views
1

我在Parse.com上有两个类:图片&数据。在Data类中,我保存了3个字段名称,手机号码&职业。在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按钮查询该手机号码的所有图像。

// 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(); 
    } 
}} 
+1

如果每个Image只有一个手机号码,那么这不是一个多对多的关系,它只是一对多的关系。正如我在其他类似问题中所说的,请勿使用可能会更改的字段链接对象。在解析中,您应该喜欢使用对象引用(例如,'Image'可以有一个名为'relatedData'的属性,您可以将其设置为'Data'记录,这只是存储指向该记录的链接并使查询更容易。 –

+0

你知道如何做到这一点?此外,如果项目是开源的,请做一个链接 – Zen

回答

0

我不能确切地告诉你的代码,而是从数据库的角度来看,它不是一个好主意,有许多表许多关系。为了解决许多< - >许多关系,你必须如下打破他们:

一个 - >许多< - 一个

欲了解更多信息,请阅读本:http://qisql.com/qisql_sqlite_many2many.html

1

我不是Android开发人员,但我会尝试将其放入其中。你有两个类,数据和图像。数据的每个实例都可以关联到许多图像。使数据的每个实例唯一的一条信息是名为Mobile-Number的属性。

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

  1. Parse.com阵列是一个很好的解决方案,如果数据的一个实例被链接到大于约50的图像少。如果您在图像的数据关联,请使用Parse.com“添加”方法:
aData.add("images", someImageObject); 
aData.saveInBackground(); 

是可能的图像列表一气呵成关联:

aData.addAll("images", Arrays.asList(image1, image2, image3)); 

当您检索从解析数据情况下,图像显示对象作为一系列“指针”。要撤回实际的Image对象,请使用“fetch”。例如如何使用提取,寻找Parse.com本节文档:

默认情况下,获取一个对象时,相关ParseObjects不 牵强。不能检索这些对象的值,直到它们已经 被取像这样:

fetchedComment.getParseObject("post") 
    .fetchIfNeededInBackground(new GetCallback<ParseObject>() { 
     public void done(ParseObject object, ParseException e) { 
      String title = post.getString("title"); 
     } 
    }); 
  1. Parse.com关系比数组溶液更具伸缩性。如果单个数据与数百或数千个图像相关联,则这是正确的解决方案。我已经开始在我自己的代码中将数组切换到关系。
 
    ParseRelation relation = aData.getRelation("images");  
    relation.add(someImageObject);  
    aData.saveInBackground(); 
  1. 一种关联类是一个很好的解决方案,如果存在关于大约例如数据和Image--之间的关系的附加信息,如果用户可以标记的图像作为“中的一个我最喜欢的”。要解决这个问题,请在Parse.com中创建一个名为ImageAssociation的新类。这个类有三个属性:

    • theDataObject(或只是数据对象的手机号码)
    • theImageObject
    • isFavorite(true或false)

我不会进入这个解决方案的机制。按照Waquas的链接回答一般信息。另请参阅关于“关系”的Parse.com文档。