2014-01-14 230 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文檔。