मेरे पास विभिन्न उपकरणों पर दो अलग-अलग Android एप्लिकेशन हैं। गंतव्य पते को पास करने या साझा करने का प्रयास कर रहा है (लेकिन इस मामले में हम एक स्ट्रिंग का प्रयास करेंगे)।

अगर मैं एक ही डिवाइस पर दोनों ऐप्स चलाता हूं, तो यह काम करता है। हालांकि, अगर मैं एक ऐप को डिवाइस पर और दूसरा ऐप एमुलेटर में चलाता हूं, तो ऐप 2 में परिणाम "हैलो वर्ल्ड" या "नो वैल्यू" और नहीं "हम महान हैं!" अगर इसे सही तरीके से पारित या साझा किया जाना चाहिए तो इसे पसंद करना चाहिए।

कोई विचार क्यों?

कृपया कोड देखें:

App1: com.example.sharedpreferences

मुख्य गतिविधि

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SharedPreferences prefs = this.getSharedPreferences("demopref", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString("demostring", "We are great ");
    editor.apply();
  }
}

गतिविधि_मुख्य (एप्लिकेशन1)

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

प्रकट

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sharedpreferences"
android:sharedUserId="@string/dev"
android:sharedUserLabel="@string/dev1">
.......

strings.xml

<string name="dev">com.example</string>
<string name="dev1">example</string>

App2: com.example.sharedprefs2

गतिविधि_मुख्य (एप्लिकेशन2)

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout     xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
    android:id="@+id/tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

strings.xml

<string name="dev">com.example</string>
<string name="dev1">example</string>

प्रकट

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sharedprefs2"
android:sharedUserId="@string/dev"
android:sharedUserLabel="@string/dev1">

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.SEND" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType="text/plain" />
        </intent-filter>
    </activity>
</application>

</manifest>

मुख्य गतिविधि

public class MainActivity extends AppCompatActivity {

TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tv = findViewById(R.id.tv);

    Context con = null;

    try {
        con = this.createPackageContext("com.example.sharedpreferences", 0);
        SharedPreferences pref = con.getSharedPreferences("demopref", Context.MODE_PRIVATE);
        String your_data = pref.getString("demostring", "No Value");
        tv.setText(your_data);
        Log.d(TAG, "text passed in = " + your_data);
    } catch (Exception e) {
        Log.e("Not data shared", e.toString());
    }
}
}

मैं इसे कैसे ठीक करूं?

0
LizG 12 जून 2018, 10:39

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि आप गलत समझते हैं कि SharedPreferences क्या हैं और वे कैसे काम करते हैं।

वे डेटा को केवल आपके डिवाइस पर स्थानीय रूप से संग्रहीत करते हैं। वे किसी भी तरह से अन्य उपकरणों के लिए साझा करने योग्य नहीं हैं।

तो आप उन्हें उसी तरह से साझा कर सकते हैं जैसे आपने एक ही डिवाइस पर 2 ऐप्स के बीच पोस्ट किया था। लेकिन यह किसी भी तरह से काम नहीं करता है अगर यह कई उपकरणों में है।

उसके लिए आपको कुछ बैकएंड सेवा की आवश्यकता होगी। शायद फायरबेस डेटाबेस पर एक नज़र डालें।

2
Moonbloom 12 जून 2018, 10:46