2

I have written a code allow the user when click on an item in list-view to go to another activity. But an error happened.The emulator asked me if I have added the new activity in the android-manifest!!.
I have done that .
what I suppose to do?

Here is the Full stack trace.

07-24 12:20:35.263: E/AndroidRuntime(455): FATAL EXCEPTION: main
07-24 12:20:35.263: E/AndroidRuntime(455): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.tstnetconnwithjson/com.example.tstnetconnwithjson.tables.full}; have you declared this activity in your AndroidManifest.xml?
07-24 12:20:35.263: E/AndroidRuntime(455):  at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404)
07-24 12:20:35.263: E/AndroidRuntime(455):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
07-24 12:20:35.263: E/AndroidRuntime(455):  at android.app.Activity.startActivityForResult(Activity.java:2817)
07-24 12:20:35.263: E/AndroidRuntime(455):  at android.app.Activity.startActivity(Activity.java:2923)
07-24 12:20:35.263: E/AndroidRuntime(455):  at com.example.tstnetconnwithjson.MainActivity$conn$1.onItemClick(MainActivity.java:195)
07-24 12:20:35.263: E/AndroidRuntime(455):  at android.widget.AdapterView.performItemClick(AdapterView.java:284)
07-24 12:20:35.263: E/AndroidRuntime(455):  at android.widget.ListView.performItemClick(ListView.java:3382)
07-24 12:20:35.263: E/AndroidRuntime(455):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696)
07-24 12:20:35.263: E/AndroidRuntime(455):  at android.os.Handler.handleCallback(Handler.java:587)
07-24 12:20:35.263: E/AndroidRuntime(455):  at android.os.Handler.dispatchMessage(Handler.java:92)
07-24 12:20:35.263: E/AndroidRuntime(455):  at android.os.Looper.loop(Looper.java:123)
07-24 12:20:35.263: E/AndroidRuntime(455):  at android.app.ActivityThread.main(ActivityThread.java:4627)
07-24 12:20:35.263: E/AndroidRuntime(455):  at java.lang.reflect.Method.invokeNative(Native Method)
07-24 12:20:35.263: E/AndroidRuntime(455):  at java.lang.reflect.Method.invoke(Method.java:521)
07-24 12:20:35.263: E/AndroidRuntime(455):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-24 12:20:35.263: E/AndroidRuntime(455):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-24 12:20:35.263: E/AndroidRuntime(455):  at dalvik.system.NativeStart.main(Native Method)

Here is the maifest file:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.tstnetconnwithjson"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

Here is the code where I have called start activity:

import java.util.ArrayList;
import java.util.Collection;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.DefaultClientConnection;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;


import com.example.tstnetconnwithjson.tables.custome;
import com.example.tstnetconnwithjson.tables.videos;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {



    Button search; ; 
    TextView name ; 
    ListView listview ; 
    ArrayList<videos > videolist; 
    ArrayAdapter< videos > adapter ; 
    AlertDialog.Builder alert ; 
    ProgressDialog progressdialog ; 
    EditText name;

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

        videolist = new ArrayList<videos>(); 
        adapter = new ArrayAdapter<videos>(this, android.R.layout.simple_list_item_1 , android.R.id.text1,videolist); 
        name=(EditText) findViewById(R.id.editText1);
        alert = new Builder(this); 
        alert.setTitle("Warnning" ) ; 
        alert.setMessage("You want to connect to the internet ..? " ); 


        alert.setNegativeButton("No ", null); 
        alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface arg0, int arg1) {
                String username=name.getText().toString();
                            new connection().execute("https://gdata.youtube.com/feeds/api/videos?author="+username+"&v=2&alt=jsonc");   

            }
        });



        progressdialog = new ProgressDialog(this); 

        progressdialog.setMessage("Wait Loading .... "); 
        progressdialog.setCancelable(false); 





        search = (Button) findViewById(R.id.button1); 
        name = (TextView) findViewById(R.id.textView1); 

        listview = (ListView) findViewById(R.id.listView1); 

        listview.setAdapter(adapter); 


        search.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {
            alert.show();   


            }
        });
    }

    class connection extends AsyncTask<String, Integer, String>{


        @Override
        protected void onPreExecute() {
             progressdialog.show(); 
            super.onPreExecute();
        }
        @Override
        protected String doInBackground(String... arg0) {

            String s = GetUrlBody(arg0[0]); 




            return s;
        }

        @Override
        protected void onPostExecute(String result) {

        try{

            JSONObject jo =(JSONObject) new JSONTokener(result).nextValue();

        JSONObject feed = jo.optJSONObject("data");
        JSONArray entry = feed.optJSONArray("items");


        for(int i = 0 ; i<entry.length() ; i++){

        String title = entry.getJSONObject(i).getString("title");

        String thumbURL = entry.getJSONObject(i).getJSONObject("thumbnail").getString("sqDefault");
        Log.d("after get image", "ok")
        String   url;
        try {
            url = entry.getJSONObject(i).getJSONObject("player").getString("mobile");
        } catch (JSONException ignore) {
            url = entry.getJSONObject(i).getJSONObject("player").getString("default");
        }

        String description = entry.getJSONObject(i).getString("description");
        Log.d("after get description", "ok");
        videos videoobject=new videos();
        videoobject.setDecscrption(description);
        videoobject.setImageurl(thumbURL);
        videoobject.setVediourl(url);
        videoobject.setVideoname(title);

        videolist.add(videoobject);
        }
        listview.setAdapter(new custome(MainActivity.this,videolist));
        Log.d("AFTER set custome ", "before notify changes");


        adapter.notifyDataSetChanged(); 

lview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                videos vobject=(videos)arg0.getItemAtPosition(arg2);

                Intent intent = new Intent(getApplicationContext(),full.class);

                 intent.putExtra("title" ,vobject.getVideoname() );



                 intent.putExtra("description" ,vobject.getDecscrption() );
                 intent.putExtra("imageURL" ,vobject.getImageurl() );
                 intent.putExtra("videoURL" ,vobject.getVediourl() );
                 startActivity(intent);

            }
        });


        }catch(Exception exception) {
            Log.d("exception ", "nock nock nock....");
            Log.e("json ", exception.getMessage()); 
        }

            progressdialog.dismiss(); 
            super.onPostExecute(result); 

        } 




        String GetUrlBody (String Url ){

            HttpClient client = new DefaultHttpClient(); 

            HttpGet gethttp = new HttpGet(Url); 

            try{
            HttpResponse response = client.execute(gethttp); 

            if(response.getStatusLine().getStatusCode() == 200){

                String save =
            EntityUtils.toString(response.getEntity(), HTTP.UTF_8); 

                return save; 

            }else {
                return "Not Found"; 
            }

            }catch(Exception exception){}




            return null; 
        }



    }


}
Tolen
  • 111
  • 9

5 Answers5

2

As first notes: 1. Don't start the new Activity as:

Intent intent = new Intent(getApplicationContext(),full.class);

but rather:

Intent intent = new Intent(MainActivity.this, full.class);

2. Your code is not even compilable as you have two class members with same naming: name (an EditText and a TextView). Then you have missing colons.

Then, make sure full really exists and it's correct in Manifest. (what class name is this anyway? legal, but Java practices convention for class name says it should start with capital letter). Something like (@Sanath's answer): <activity android:name=".tables.full"/> or <activity android:name="com.example.tstnetconnwithjson.tables.full"/>.

Then, even if this doesn't help, it may caused by the fact that your private libraries are not exported in Eclipse. But that if your full activity extends from compatibility package FragmentActivity.

These are the possible causes for your issue. At least the ones I can think of and that are very familiar.

Community
  • 1
  • 1
gunar
  • 14,660
  • 7
  • 56
  • 87
  • Thanks a lot . I think the problem is in my eclipse. – Tolen Jul 25 '13 at 08:41
  • 1
    So you didn't fix your issue yet? – gunar Jul 25 '13 at 08:42
  • Yes.unfortunately. :( – Tolen Jul 25 '13 at 09:08
  • 1
    Same problem: `android.content.ActivityNotFoundException` ? Did you follow all above suggestions and nothing? – gunar Jul 25 '13 at 09:10
  • Yes. It is the same. My manifest does not accept any new activity .In order to open manifest I have to close the eclipse and renter it again. I have created a new project same problem . I will re-download my eclipse again. – Tolen Jul 25 '13 at 09:13
  • 1
    Looks like your Eclipse is a mess :). Try other Eclipse or migrate to IntelliJ; there is a free version that you can use for Android dev. – gunar Jul 25 '13 at 09:21
1

Have you declared all activities , that you have? You must declare all activities in your manifest. Example :

 <activity
            android:name=".YourActivity"
            android:label="@string/title_activity_your" >
            <intent-filter>
            </intent-filter>
        </activity>
1

Try adding the .full in your manifest like this:

<activity
        android:name=".full" > // not sure if you need tabels.full here or not. Try and see.

        <intent-filter>
            <action android:name="com.example.tstnetconnwithjson.tables.FULL" />

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

Then start the activity in your onclick like this:

Intent a = new Intent("com.example.tstnetconnwithjson.tables.FULL");
startActivity(a);
LordMarty
  • 1,551
  • 1
  • 12
  • 17
0

Like described here (Add a new activity to the AndroidManifest?) you need to add a separate activity-tag for each class (which extends Activity) and is started via startActivity() or startActivityForResult() respectively. In your case, from what you have posted, there is no entry for "full.class" in your manifest. So to get rid of your error you need to specify something like

<activity android:name=".full" />

If the full class is not in the same package like your MainActivity you may need to specify the package as well, like android:name=".tables.full". Maybe you also like to change the name of the class as well to something more expressive.

Community
  • 1
  • 1
André Diermann
  • 2,725
  • 23
  • 28
0

modify your manifest file like following

<activity android:name=".tables.full"></activity>

or

<activity android:name="com.example.tstnetconnwithjson.tables.full"></activity>
Sanath
  • 493
  • 7
  • 22