Dtlyl2
Dtlyl2

Reputation: 13

Implicit Intent Not Working

I'm trying to open up a browser from my app.

Heres my code:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(browserIntent);

But I keep on getting this error:

04-08 18:07:26.117 6133-6133/com.example.android.quakereport E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.android.quakereport, PID: 6133
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
    at android.app.Activity.startActivityForResult(Activity.java:4473)
    at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:65)
    at android.app.Activity.startActivityForResult(Activity.java:4430)
    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:711)
    at android.app.Activity.startActivity(Activity.java:4791)
    at android.app.Activity.startActivity(Activity.java:4759)
    at com.example.android.quakereport.EarthquakeActivity.startIntent(EarthquakeActivity.java:53)
    at com.example.android.quakereport.EarthquakeAdapter$1.onClick(EarthquakeAdapter.java:68)
    at android.view.View.performClick(View.java:6256)
    at android.view.View$PerformClick.run(View.java:24701)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

Here is my EarthquakeAdapter code:

currentView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String url = QueryUtils.getURL(positionNum); EarthquakeActivity ea = new EarthquakeActivity(); ea.startIntent(url); } });

And here is my QueryUtils code:

   `String url = "";

    try {
        JSONObject root = new JSONObject(SAMPLE_JSON_RESPONSE);
        JSONArray earthquakesArray = root.getJSONArray("features");
        JSONObject currentEarthquake = earthquakesArray.getJSONObject(arrayNum);
        JSONObject propertires = currentEarthquake.getJSONObject("properties");

        url = propertires.getString("url");
        Log.v("JSON", "url" + url);

    }catch (JSONException e) {
        Log.e("JSON", "Error");
    }

    return url;`

I've already checked, and the url is working.

Can someone help me?

Upvotes: 0

Views: 596

Answers (3)

CommonsWare
CommonsWare

Reputation: 1006744

Never create an instance of an activity yourself. Only the framework can create an activity successfully.

Get rid of:

EarthquakeActivity ea = new EarthquakeActivity();

Instead, if EarthquakeActivity is the activity that hosts the AdapterView that is using EarthquakeAdapter, pass the EarthquakeActivity into the EarthquakeAdapter constructor, so the adapter has access to it.

Upvotes: 4

Shailendra Madda
Shailendra Madda

Reputation: 21551

Your exception is related to startActivityForResult as it stated:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference at android.app.Activity.startActivityForResult(Activity.java:4473) at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54) 

So it could be the problem with something this not with your Implicit intent

And android.app.Fragment is different than android.support.v4.app.Fragment make sure you imported correct one

And also make sure you added INTERNET permission:

To add Internet permission in manifest

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Add it in after manifest tag in Manifest file

It could be like:

<manifest ... >
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    ...
</manifest>

Upvotes: 0

Raman Sharma
Raman Sharma

Reputation: 177

Need to add this permission in manifest file

<uses-permission android:name="android.permission.INTERNET"/>

Upvotes: 0

Related Questions