1

連絡先から選択した電話番号を文字列などに保存して、別のクラスから呼び出すことができるようにしようとしています...これは連絡先ボタンのコードです

@Override
protected void onCreate(Bundle savedInstanceState)
{
    // initialize
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu);
    //vi1 = (TextView) findViewById (R.id.textView1);
    co1 = (Button) findViewById (R.id.button3);
    co1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
            startActivityForResult(intent, PICK_CONTACT);
        }
    });

}

これは onActivityResult がテキストビューに表示するためのものです

@Override  
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    if (resultCode == RESULT_OK) {  
        switch (requestCode) {  
        case PICK_CONTACT:
        final TextView vi1 = (TextView) findViewById(R.id.textView1);
        Cursor cursor = null;  
        String phoneNumber = "";
        List<String> allNumbers = new ArrayList<String>();
        int phoneIdx = 0;
        try {  
            Uri result = data.getData();  
            String id = result.getLastPathSegment();  
            cursor = getContentResolver().query(Phone.CONTENT_URI, null, Phone.CONTACT_ID + "=?", new String[] { id }, null);  
            phoneIdx = cursor.getColumnIndex(Phone.DATA);
            if (cursor.moveToFirst()) {
                while (cursor.isAfterLast() == false) {
                phoneNumber = cursor.getString(phoneIdx);
                allNumbers.add(phoneNumber);
                cursor.moveToNext();}
             } else {
                    //no results actions
                }  
            } catch (Exception e) {  
               //error actions
            } finally {  
                if (cursor != null) {  
                    cursor.close();
                }

                final CharSequence[] items = allNumbers.toArray(new String[allNumbers.size()]);
                AlertDialog.Builder builder = new AlertDialog.Builder(MenuActivity.this);
                builder.setTitle("Choose a number");
                builder.setItems(items, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int item) {
                        String selectedNumber = items[item].toString();
                        selectedNumber = selectedNumber.replace("-", "");
                        vi1.setText(selectedNumber);
                    }
                });
                AlertDialog alert = builder.create();
                if(allNumbers.size() > 1) {
                    alert.show();
                } else {
                    String selectedNumber = phoneNumber.toString();
                    selectedNumber = selectedNumber.replace("-", "");
                    vi1.setText(selectedNumber);
                }

                if (phoneNumber.length() == 0) {  
                    //no numbers found actions  
                }  
            }  
            break;  
        }  
    } else {
       //activity result error actions
    }  
}

別のクラスで呼び出すことができるように、テキストビューの出力を文字列またはその他の任意のタイプに保存したかったのです。私を助けてください。ありがとうございました!

4

1 に答える 1

4

他のクラスまたはアクティビティの変数にアクセスするには、いくつかの方法があります。

  1. データベース
  2. 共通の好み。
  3. オブジェクトのシリアル化。
  4. 共通データを保持できるクラスは、依存する共通ユーティリティとして名前を付けることができます。

プロジェクトのニーズによって異なります。

A.データベース

SQLite は、Android に組み込まれているオープン ソース データベースです。SQLite は、SQL 構文、トランザクション、準備済みステートメントなどの標準的なリレーショナル データベース機能をサポートしています。

チュートリアル -- http://www.vogella.com/articles/AndroidSQLite/article.html

B.共有設定

ユーザー名を保存するとします。したがって、キーユーザー名、、値の 2 つが存在することになります。

保管方法

 // Create object of SharedPreferences.
 SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
 //now get Editor
 SharedPreferences.Editor editor = sharedPref.edit();
 //put your value
 editor.putString("userName", "stackoverlow");

 //commits your edits
 editor.commit();

putString()、putBoolean()、putInt()、putFloat()、putLong() を使用して、目的の dtatype を保存できます。

取得方法

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String userName = sharedPref.getString("userName", "Not Available");

http://developer.android.com/reference/android/content/SharedPreferences.html

C.オブジェクトのシリアル化

オブジェクトの状態を保存してネットワーク経由で送信したい場合、または目的に合わせて使用​​する場合は、オブジェクトのシリアル化を使用します。

Java Bean を使用してフィールドの 1 つとして格納し、そのためにゲッターとセッターを使用します。

JavaBeans は、プロパティを持つ Java クラスです。プロパティはプライベート インスタンス変数と考えてください。これらはプライベートであるため、クラスの外部からアクセスできる唯一の方法は、クラス内のメソッドを使用することです。プロパティの値を変更するメソッドはセッター メソッドと呼ばれ、プロパティの値を取得するメソッドはゲッター メソッドと呼ばれます。

public class VariableStorage implements Serializable  {

    private String inString ;

    public String getInString() {
        return inString;
    }

    public void setInString(String inString) {
        this.inString = inString;
    }


}

を使用してメールメソッドに変数を設定します

VariableStorage variableStorage = new VariableStorage();
variableStorage.setInString(inString);

次に、オブジェクト Serialzation を使用してこのオブジェクトをシリアル化し、他のクラスでこのオブジェクトを逆シリアル化します。

シリアル化では、オブジェクトは、オブジェクトのデータと、オブジェクトの型およびオブジェクトに格納されているデータの型に関する情報を含む一連のバイトとして表すことができます。

シリアル化されたオブジェクトがファイルに書き込まれた後、そのオブジェクトをファイルから読み取って逆シリアル化できます。つまり、オブジェクトとそのデータを表す型情報とバイトを使用して、メモリ内にオブジェクトを再作成できます。

このためのチュートリアルが必要な場合は、このリンクを参照してください

http://javawithswaranga.blogspot.in/2011/08/serialization-in-java.html

他のクラスで変数を取得する

D.共通ユーティリティ

プロジェクトで頻繁に必要とする共通データを含むクラスを自分で作成できます。

サンプル

public class CommonUtilities {

    public static String className = "CommonUtilities";

}
于 2013-05-18T06:09:40.700 に答える