I have two classes on Parse.com : Image & Data. In Data class, I am saving 3 fields Name,Mobile-number & Occupation. In Image class I'm saving images.
I have to create relation between these two classes so that I can fetch images with the corresponding mobile-number. one mobile number can save many images and the table Data can have many mobile numbers.
Not able to find how can I fetch the images with a particular mobile number. Please help as I have gone thru the documentation. Thanks in advance. Here is my code:
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();
}
}
});
}
After asking for mobile number, click on getImage button to query all the images for that mobile number.
// 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();
}
}}
I can't exactly tell you the code, but from database perspective, its not a good idea to have tables with many to many relationship. In order to resolve many <-> many relationships, you must break them as below:
For more info, read this: http://qisql.com/qisql_sqlite_many2many.html
I'm not an Android developer, but I'll try to field this one. You have two classes, Data and Image. Each instance of Data can be associated to many Images. The piece of information that makes each instance of Data unique is the attribute named Mobile-Number.
You have three options: 1. Parse.com Array 2. Parse.com Relation 3. An association class (as Waquas suggests).
It is possible to associate a list of Images in one go:
When you retrieve a Data instance from parse, the Image objects show up as an array of "pointers". To pull back the actual Image objects, use "fetch". For example of how to use fetch, look for this section of the Parse.com documentation:
An association class is a good solution if there is extra information about about the relationship between Data and Image-- for example, if a user can mark an image as "one of my favorites". To solve this problem, create a new class in Parse.com called ImageAssociation. The class has three attributes:
I won't go into the mechanics of this solution. Follow Waquas' link in his answer for general information. See also the Parse.com documentation about "relations".