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 将其显示给 textview

@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
    }  
}

我想将 textview 上的输出存储到字符串或任何类型的其他形式中,以便我可以在不同的类上调用它。请帮我。谢谢!

4

1 回答 1

4

您可以通过多种方式访问​​其他类或 Activity 中的变量。

  1. 数据库
  2. 共享偏好。
  3. 对象序列化。
  4. 可以保存公共数据的类可以命名为 Common Utilities,这取决于您。

这取决于您的项目需求。

A.数据库

SQLite 是一个嵌入到 Android 中的开源数据库。SQLite 支持标准的关系数据库功能,如 SQL 语法、事务和准备好的语句。

教程——http: //www.vogella.com/articles/AndroidSQLite/article.html

B.共同偏好

假设您要存储用户名。所以现在会有两件事,一个Key Username,一个Value Value。

如何储存

 // 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() 您可以保存所需的数据类型。

如何获取

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

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

C.对象序列化

如果我们想保存对象状态以通过网络发送它,则使用对象序列化,或者您也可以将其用于您的目的。

使用 java bean 并将其存储为他的字段之一,并为此使用 getter 和 setter

JavaBean 是具有属性的 Java 类。将属性视为私有实例变量。由于它们是私有的,因此从类外部访问它们的唯一方法是通过类中的方法。更改属性值的方法称为 setter 方法,检索属性值的方法称为 getter 方法。

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);

然后使用对象序列化来序列化这个对象,并在你的其他类中反序列化这个对象。

在序列化中,对象可以表示为一个字节序列,其中包括对象的数据以及有关对象类型和存储在对象中的数据类型的信息。

序列化的对象写入文件后,可以从文件中读取并进行反序列化,即表示对象及其数据的类型信息和字节可用于在内存中重新创建对象。

如果您想要此教程,请参阅此链接

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

获取其他类中的变量

D. CommonUtilities

您可以自己创建一个类,其中可以包含您在项目中经常需要的常用数据。

样本

public class CommonUtilities {

    public static String className = "CommonUtilities";

}
于 2013-05-18T06:09:40.700 回答