Java 从我的android应用程序打开youtube应用程序。如何传递身份证?

Java 从我的android应用程序打开youtube应用程序。如何传递身份证?,java,android,youtube,Java,Android,Youtube,我对安卓系统还很陌生。我需要做一个应用程序,在一个概述中显示一堆视频,从互联网上的API检索 以下是API的外观: [{“名称”:“9VJirQKuoxs”,“图像”:”http://i.ytimg.com/vi/9VJirQKuoxs/default.jpg“}] 这是我想要的。“name:”是视频ID,我需要打开Youtube应用程序并打开此特定视频。我怎么打开这个?我来自PHP开发,我无法理解它,因为我仍然处于一种“网络”状态。谁能让我走上正确的道路?或者甚至提供一个例子 谢谢,如果我需要

我对安卓系统还很陌生。我需要做一个应用程序,在一个概述中显示一堆视频,从互联网上的API检索

以下是API的外观:

[{“名称”:“9VJirQKuoxs”,“图像”:”http://i.ytimg.com/vi/9VJirQKuoxs/default.jpg“}]

这是我想要的。“name:”是视频ID,我需要打开Youtube应用程序并打开此特定视频。我怎么打开这个?我来自PHP开发,我无法理解它,因为我仍然处于一种“网络”状态。谁能让我走上正确的道路?或者甚至提供一个例子

谢谢,如果我需要提供代码,请询问

编辑:

我试着打开youtube应用程序,它可以正常工作,但我需要打开一个已经点击的特定项目的应用程序

如何获取单击项的变量?在本例中,变量是一个名为video_id的字符串 以下是变量生成的部分:

String url = params[0];
            HttpClient client = new DefaultHttpClient();
            HttpGet get = new HttpGet(url);
            HttpResponse response;
            response = client.execute(get);
            InputStream content = response.getEntity().getContent();
            BufferedReader reader;
            reader = new BufferedReader(new InputStreamReader(content));
            String line;
            String json = "";
            while ((line = reader.readLine()) != null) {
                json += line;
            }

            JSONArray array = new JSONArray(json);
            ArrayList<JSONFields> alData = new ArrayList<JSONFields>();
            for (int i = 0; i < array.length(); i++) {

                JSONFields data = new JSONFields();
                JSONObject obj = array.getJSONObject(i);

                data.setName(obj.getString("name"));
                data.setUrl(obj.getString("url"));
                data.setVideoid(obj.getString("name"));

                alData.add(data);
            }
            System.out.println("Data returned sucessfully");
            return alData;
这也是错误日志:

05-22 16:44:42.280:E/AndroidRuntime(24776):致命异常:主 05-22 16:44:42.280:E/AndroidRuntime(24776):java.lang.NullPointerException 05-22 16:44:42.280:E/AndroidRuntime(24776):位于com.bounty4u.jsonparsing.MainActivity$1.onItemClick(MainActivity.java:49) 05-22 16:44:42.280:E/AndroidRuntime(24776):在android.widget.AdapterView.performItemClick(AdapterView.java:298) 05-22 16:44:42.280:E/AndroidRuntime(24776):在android.widget.AbsListView.performItemClick(AbsListView.java:1202) 05-22 16:44:42.280:E/AndroidRuntime(24776):在android.widget.AbsListView$PerformClick.run(AbsListView.java:2975) 05-22 16:44:42.280:E/AndroidRuntime(24776):在android.widget.AbsListView$1.run(AbsListView.java:3657) 05-22 16:44:42.280:E/AndroidRuntime(24776):位于android.os.Handler.handleCallback(Handler.java:615) 05-22 16:44:42.280:E/AndroidRuntime(24776):位于android.os.Handler.dispatchMessage(Handler.java:92) 05-22 16:44:42.280:E/AndroidRuntime(24776):在android.os.Looper.loop(Looper.java:137) 05-22 16:44:42.280:E/AndroidRuntime(24776):位于android.app.ActivityThread.main(ActivityThread.java:4765) 05-22 16:44:42.280:E/AndroidRuntime(24776):位于java.lang.reflect.Method.Invokenactive(本机方法) 05-22 16:44:42.280:E/AndroidRuntime(24776):位于java.lang.reflect.Method.invoke(Method.java:511) 05-22 16:44:42.280:E/AndroidRuntime(24776):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 05-22 16:44:42.280:E/AndroidRuntime(24776):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 05-22 16:44:42.280:E/AndroidRuntime(24776):在dalvik.system.NativeStart.main(本机方法)

编辑:

JSONArray数组=新的JSONArray(json);
ArrayList alData=新的ArrayList();
对于(int i=0;i
尝试以下方法:

startActivity(新的意图(Intent.ACTION\u视图,Uri.parse()http://www.youtube.com/watch?v=9VJirQKuoxs")));

Android将允许您选择打开视频的方式(浏览器或youtube应用程序)。 这应该可以在真实设备上工作,但不能在模拟器上工作

希望能有所帮助。

请看一下。这是“一系列静态方法的选择,这些方法创建指向主YouTube应用程序中特定活动的意图。”

您感兴趣的目的是:

至于从单击的列表项中获取videoId,这取决于您如何创建列表并将数据传递给它。您是否将返回的列表(在您的示例中名为“alData”)传递给列表适配器?您可能可以在AdapterView.onItemClick()中执行类似的操作:

我在这里做了一些假设。首先,我假设您的列表由一群JSONField对象表示(您的JSON解析函数似乎表明了这一点)。其次,我假设有一个JSONField.getVideoId()来匹配您已经拥有的setter

更新:由于您在单击列表项时提到空指针,因此有一些因素可能会导致它。listview、适配器或项为空。我建议您在Eclipse中的click侦听器的第一行设置一个断点,看看有什么问题。或者,您可以尝试直接使用AdapterView来:

@覆盖
public void onItemClick(适配器视图arg0、视图arg1、内部位置、长arg3){
JSONField项=(JSONField)arg0.getItemAtPosition(position);
如果(项!=null){
字符串videoId=item.getVideoId();
}
}
试试这个:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:"+videoId)); 
intent.putExtra("VIDEO_ID", videoId); 
startActivity(intent); 

我使用上面Damien R的建议创建了一个更完整的示例。如果它对您有效,那么错误必须在列表处理代码的其他地方

package com.redchillipadi.youtube;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;

public class MainActivity extends Activity {

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

        String videoID = "9VJirQKuoxs";
        //TODO: Sanitize input to prevent code injection
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v="+videoID)));
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

如何从JSON中获取该部件的ID?我在listview中将它显示为文本,但我不知道如何将它传递到youtube应用程序。我用JSONFields类编辑了我的代码。我已经复制并粘贴了您在此处展示的代码,应用程序可以启动,但在我单击列表项时会崩溃。啊,您可能应该使用AdapterView获取列表项。我将更新我的回答我修改了代码并运行了它,但没有获得正确的ID。我通过在上面声明videoId字符串进行了测试!=如果发现该项实际上为null,则为null。我已经测试了getVideoid方法是否会被调用,方法是将println放入其中,但它不会将任何内容打印到我的控制台中。我是不是打错班了?难道没有一个合适的东西吗
    JSONArray array = new JSONArray(json);
            ArrayList<JSONFields> alData = new ArrayList<JSONFields>();
            for (int i = 0; i < array.length(); i++) {

                JSONFields data = new JSONFields();
                JSONObject obj = array.getJSONObject(i);

                data.setName(obj.getString("name"));
                data.setUrl(obj.getString("url"));
                data.setVideoid(obj.getString("video_id"));
                System.out.println("Video ID: " + obj.getString("video_id"));

                alData.add(data);
            }
/**
 * Put this in your activity
 */
public void playVideo(String videoId) {
    if(YouTubeIntents.canResolvePlayVideoIntent(this)) {
        Intent i = YouTubeIntents.createPlayVideoIntent(this, videoId);
        startActivity(i);
    }
}
JSONFields data = (JSONFields)listview.getAdapter().getItem(position);
String videoId = data.getVideoId();
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
    JSONField item = (JSONField)arg0.getItemAtPosition(position);
    if(item != null) {
        String videoId = item.getVideoId();     
    }
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube:"+videoId)); 
intent.putExtra("VIDEO_ID", videoId); 
startActivity(intent); 
package com.redchillipadi.youtube;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;

public class MainActivity extends Activity {

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

        String videoID = "9VJirQKuoxs";
        //TODO: Sanitize input to prevent code injection
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v="+videoID)));
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}