2

我编写了一个代码,允许用户在单击列表视图中的项目时转到另一个活动。但是发生了错误。模拟器问我是否在 android-manifest 中添加了新活动!!。
我已经做到了。
我想做什么?

这是完整的堆栈跟踪。

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)

这是maifest文件:

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

这是我调用启动活动的代码:

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



    }


}
4

5 回答 5

2

作为第一个注释:1.不要将新活动启动为:

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

反而:

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

2. 您的代码甚至无法编译,因为您有两个具有相同名称的类成员:(name一个 EditText 和一个 TextView)。然后你缺少冒号。

然后,确保full确实存在并且它在 Manifest 中是正确的。(无论如何,这是什么类名?合法,但 Java 对类名的惯例约定它应该以大写字母开头)。类似 (@Sanath 的回答): <activity android:name=".tables.full"/><activity android:name="com.example.tstnetconnwithjson.tables.full"/>.

然后,即使这没有帮助,也可能是由于您的私有库没有在 Eclipse 中导出。但是,如果您的full活动从兼容性包扩展FragmentActivity

这些是您的问题的可能原因。至少我能想到的并且非常熟悉的那些。

于 2013-07-24T13:20:27.530 回答
1

您是否已宣布所有活动?您必须在清单中声明所有活动。例子 :

 <activity
            android:name=".YourActivity"
            android:label="@string/title_activity_your" >
            <intent-filter>
            </intent-filter>
        </activity>
于 2013-07-24T13:15:15.337 回答
1

尝试像这样在清单中添加 .full :

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

然后像这样在你的 onclick 中启动活动:

Intent a = new Intent("com.example.tstnetconnwithjson.tables.FULL");
startActivity(a);
于 2013-07-24T13:21:55.423 回答
0

就像这里描述的(向 AndroidManifest 添加一个新的活动?),您需要为每个类(扩展 Activity)添加一个单独的活动标签,并分别通过 startActivity() 或 startActivityForResult() 启动。就您而言,根据您发布的内容,您的清单中没有“full.class”条目。所以要摆脱你的错误,你需要指定类似的东西

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

如果整个类与 MainActivity 不在同一个包中,您可能还需要指定包,例如android:name=".tables.full". 也许您还想将类的名称更改为更具表现力的名称。

于 2013-07-24T12:45:24.547 回答
0

修改您的清单文件,如下所示

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

或者

<activity android:name="com.example.tstnetconnwithjson.tables.full"></activity>
于 2013-07-24T13:05:14.197 回答