This is True / False or a bug!?

by Perry168 » Thu, 21 Apr 2011 09:55:51 GMT


Sponsored Links
 Hi,
Today, I wrote a program. The function is to get the installed
packages name through the provider name. But I find a problem, when I
compare two SAME strings. The Boolean result will be FALSE.
I used the Eclipse to watch the value change. From expression, I saw
the Local1 and xx are same. But the Boolean bb is false. Also I
installed the apk to phone too. I found the result is "FALSE" too.
I don know the problem come from and how to fix it.
I hope who can teach me.
Following is my main.XML and source.

 < XML >

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=" http://schemas.android.com/apk/res/ 
android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView android:text="TextView" android:id="@+id/tV1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></TextView>
    <Button android:text="Button" android:id="@+id/bn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
</LinearLayout>

< JAVA SOURCE >
import java.util.List;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.ProviderInfo;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class FindPackage extends Activity  implements OnClickListener
{

    TextView tV1;
    Button bn1;
        String xx = "com.android.alarmclock";
        Boolean bb = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    tV1 = (TextView) findViewById (R.id.tV1);
    bn1 = (Button) findViewById (R.id.bn1);
    bn1.setOnClickListener (this);
    }

        @Override
        public void onClick(View v) {

        if (v == bn1){
                List <PackageInfo>  aa = null;
                ProviderInfo [] kk = null;
                String Local1 = "";
                aa =  this.getPackageManager().getInstalledPackages(8); // Get 
all
Packages
                int i = aa.toArray().length-1; // Get Number of Packages


        while (i>=0)
        {
                kk = aa.get(i).providers; // Withdraw the Provider
                if (kk == null){
                        i--;
                        continue;
                }
                if (kk[0].name.contains("Alarm")) // Checking the Provider name
which has Alarm word"
                                {
                                Local1 = kk[0].packageName; // put the package 
name into
Local1
                                break;
                                }
                i--;
        }

                i = 0;

            bb = (xx==Local1);

            tV1.setText(bb+""); // Show the result

        }


        }
}

-- 



Re: This is True / False or a bug!?

by Jens » Thu, 21 Apr 2011 18:56:49 GMT


 ou could start with your broken string comparison.

(xx==Local1);

Use String#equals(String) instead if you're not trying to ascertain if
xx and Local1 are both *instances* of the same String object.

On 20 Apr, 06:08, Perry168 <perry...@netvigator.com> wrote:

--


Sponsored Links


Re: This is True / False or a bug!?

by Shawn Holland » Thu, 21 Apr 2011 18:56:54 GMT


 our code is checking to see if the two variables referencing the same
object. You need to use the equals method...

bb = (xx.equals(Local1));


On Apr 20, 12:08am, Perry168 <perry...@netvigator.com> wrote:

--



Re: This is True / False or a bug!?

by DanH » Fri, 22 Apr 2011 03:03:23 GMT


 lso, if one will be doing a lot of repeated compares of the same
String values, String.intern() can be used to get a pointer that can
be compared to other pointers to interned Strings.

Some Strings (I'm thinking all String literals in a program) are
defined to be already interned. So, eg, if ClassA.methodA calls
ClassB.methodB and passes a value that originated as the literal "Some
String!", one could (if they knew the value originated as a literal)
safely compare to the literal "Some String!" in methodB using the "=="
comparison.

On Apr 21, 5:56am, Shawn Holland <seholl...@gmail.com> wrote:

--



Re: This is True / False or a bug!?

by cool rss feed » Fri, 22 Apr 2011 03:39:22 GMT


 YI:

"==" on String will do an Object-based comparison. it means that xx
and local1 IS same OBJECT if the result value is true.

and 99% of your time you wont be doing object-based comparison on
String object. so use String.compareTo().



On Apr 20, 12:08pm, Perry168 <perry...@netvigator.com> wrote:

--



Re: This is True / False or a bug!?

by cool rss feed » Fri, 22 Apr 2011 03:39:23 GMT


 hy dont you use Local1.compareTo(xx)?

Keep in mind that "==" does not guarantee the same result when you use
String.compareTo() from program to program.

Terence

On Apr 20, 12:08pm, Perry168 <perry...@netvigator.com> wrote:

--



Re: This is True / False or a bug!?

by dalisa099 » Fri, 22 Apr 2011 03:39:24 GMT


 Hi,

Replacing the line :
bb = (xx==Local1);
by :
bb = xx.equals(Local1);

should solve your issue.


-- 



Re: This is True / False or a bug!?

by Hyvi » Fri, 22 Apr 2011 03:39:27 GMT


 b = (xx==Local1);
should be
bb = (xx.equals(Local1));

2011/4/20 Perry168 <perry...@netvigator.com>





--
========================= ===============
Protect your dream ...

wEiBo: @Blamestorming
tWiTTer: HyviTan
fAvOriTe: Linux Java

--



Other Threads

1. How to find out which package started an intent?

How can I find out which activity started the current intent?

Example:
Activity A starts Activity B through an intent startIntentForResult().

Can activity B find the package name of the application that contains
activity A?
Something like getComponent(), but not for activity B, but for
activity A.

Somehow the system must know about this, because the intent is sent
back to the calling activity A after activity B is done. I would like
to know whether activity B can also access this information, and treat
specific packages (e.g. trusted packages) in a priviledged way.

Peli


--~--~---------~--~----~------------~-------~--~----~

2. service with a UI

Hi,

My application has two halves - one that interacts with the user and
gathers some data and stores it, the other half of it is like service
that constantly monitors and processes this data and carries out the
user specified actions in the background. How do I develop this ?

One approach is to split the app. into two independent parts - an
activity and a service.  Activity (with textboxes and buttons etc.)
takes user input and stores the data in sql database. However, it is
not clear to me if the service portion of the application can access
it. Is that possible ? In this approach, the activity and service will
be completely independent and the activity has to notify the service
(somehow ?) whenever user inputs new data so that the service can
reprioritize its task list.

The approach is to have a single app that has both UI/activity and
service ? Are there any examples out there for such applications ? In
this approach my app should be running in the background as soon as
phone is booted up.

Please let me know your thoughts on this.

Thanks,
Sarath

--~--~---------~--~----~------------~-------~--~----~

3. Unable to get all phone numbers of a contact.

4. Why Google does not accepts my Visa credit card?

5. FM application on Android.

6. Motorola A810 with Android

7. dalvikvm crashing while starting Wifi