0

我正在 android 中进行一项从给定 url 获取 JSON 文件的活动。JSON 文件将提供视频的 URL 和将在活动中显示的图像缩略图。

但我无法从我传递给 GetData 类的硬编码 url 中获取 JSON。类型是 GET。事实上,我什至无法运行它,该活动使应用程序崩溃。请告诉我代码中有什么问题。

PS我已经包括了互联网权限。

    public class GetData extends AsyncTask<String, Void, Boolean>{

    protected Boolean doInBackground(String... url) {

        try {

        HttpGet httpRequest = null;
        httpRequest = new HttpGet(url.toURI());

        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);

        HttpEntity entity = response.getEntity();
        BufferedHttpEntity b_entity = new BufferedHttpEntity(entity);
        String input = b_entity.getContent().toString();


        JSONObject jobj1 = new JSONObject(input).getJSONObject("thumb");
        JSONObject jobj2 = new JSONObject(input).getJSONObject("video");
        url_thmb=jobj1.getString("thumb");
        url_vdo=jobj2.getString("video");

    }catch(JSONException e){
            Log.e("EX", e.toString());
    }catch (URISyntaxException e){
            e.printStackTrace();
    }catch (MalformedURLException e){
            Log.e("log", "bad url");
    }catch (IOException e) {
            Log.e("log", "io error");
    }
        return null;
    }

logcat 说:

12-12 14:23:15.050: D/dalvikvm(23233): Late-enabling CheckJNI
12-12 14:23:15.170: I/dalvikvm(23233): Could not find method android.view.ViewGroup.onNestedScrollAccepted, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.onNestedScrollAccepted
12-12 14:23:15.170: W/dalvikvm(23233): VFY: unable to resolve virtual method 11338: Landroid/view/ViewGroup;.onNestedScrollAccepted (Landroid/view/View;Landroid/view/View;I)V
12-12 14:23:15.170: D/dalvikvm(23233): VFY: replacing opcode 0x6f at 0x0000
12-12 14:23:15.170: I/dalvikvm(23233): Could not find method android.view.ViewGroup.onStopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.onStopNestedScroll
12-12 14:23:15.170: W/dalvikvm(23233): VFY: unable to resolve virtual method 11344: Landroid/view/ViewGroup;.onStopNestedScroll (Landroid/view/View;)V
12-12 14:23:15.170: D/dalvikvm(23233): VFY: replacing opcode 0x6f at 0x0000
12-12 14:23:15.170: I/dalvikvm(23233): Could not find method android.support.v7.internal.widget.ActionBarOverlayLayout.stopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.setHideOnContentScrollEnabled
12-12 14:23:15.170: W/dalvikvm(23233): VFY: unable to resolve virtual method 9032: Landroid/support/v7/internal/widget/ActionBarOverlayLayout;.stopNestedScroll ()V
12-12 14:23:15.170: D/dalvikvm(23233): VFY: replacing opcode 0x6e at 0x000e
12-12 14:23:15.190: I/dalvikvm(23233): Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations
12-12 14:23:15.190: W/dalvikvm(23233): VFY: unable to resolve virtual method 364: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
12-12 14:23:15.190: D/dalvikvm(23233): VFY: replacing opcode 0x6e at 0x0002
12-12 14:23:15.190: I/dalvikvm(23233): Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType
12-12 14:23:15.190: W/dalvikvm(23233): VFY: unable to resolve virtual method 386: Landroid/content/res/TypedArray;.getType (I)I
12-12 14:23:15.190: D/dalvikvm(23233): VFY: replacing opcode 0x6e at 0x0002
12-12 14:23:15.271: D/AndroidRuntime(23233): Shutting down VM
12-12 14:23:15.271: W/dalvikvm(23233): threadid=1: thread exiting with uncaught exception (group=0x41635d88)
12-12 14:23:15.271: E/AndroidRuntime(23233): FATAL EXCEPTION: main
12-12 14:23:15.271: E/AndroidRuntime(23233): Process: com.example.streamer, PID: 23233
12-12 14:23:15.271: E/AndroidRuntime(23233): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.streamer/com.example.streamer.MainActivityStream}: java.lang.NullPointerException
12-12 14:23:15.271: E/AndroidRuntime(23233):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2237)
12-12 14:23:15.271: E/AndroidRuntime(23233):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2286)
12-12 14:23:15.271: E/AndroidRuntime(23233):    at android.app.ActivityThread.access$800(ActivityThread.java:144)
12-12 14:23:15.271: E/AndroidRuntime(23233):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)
12-12 14:23:15.271: E/AndroidRuntime(23233):    at android.os.Handler.dispatchMessage(Handler.java:102)
12-12 14:23:15.271: E/AndroidRuntime(23233):    at android.os.Looper.loop(Looper.java:212)
12-12 14:23:15.271: E/AndroidRuntime(23233):    at android.app.ActivityThread.main(ActivityThread.java:5135)
12-12 14:23:15.271: E/AndroidRuntime(23233):    at java.lang.reflect.Method.invokeNative(Native Method)
12-12 14:23:15.271: E/AndroidRuntime(23233):    at java.lang.reflect.Method.invoke(Method.java:515)
12-12 14:23:15.271: E/AndroidRuntime(23233):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
12-12 14:23:15.271: E/AndroidRuntime(23233):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
12-12 14:23:15.271: E/AndroidRuntime(23233):    at dalvik.system.NativeStart.main(Native Method)
12-12 14:23:15.271: E/AndroidRuntime(23233): Caused by: java.lang.NullPointerException
12-12 14:23:15.271: E/AndroidRuntime(23233):    at com.example.streamer.MainActivityStream.onCreate(MainActivityStream.java:64)
12-12 14:23:15.271: E/AndroidRuntime(23233):    at android.app.Activity.performCreate(Activity.java:5231)
12-12 14:23:15.271: E/AndroidRuntime(23233):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-12 14:23:15.271: E/AndroidRuntime(23233):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2201)
12-12 14:23:15.271: E/AndroidRuntime(23233):    ... 11 more
12-12 14:23:21.817: E/EX(23233): org.json.JSONException: Value java.io.ByteArrayInputStream@42eeb310 of type java.lang.String cannot be converted to JSONObject
4

3 回答 3

0

刚刚通过在 mainActivity 中解析 JSON 而不是在后台执行它来修改上面的代码(有问题的那个),它对我有用。

在 mainActivity 添加:

    GetData getData=new GetData();
    getData.execute();
    String result = null;

    try{
        result = getData.get().toString();
    }catch(Exception e){}

    try{
        JSONObject jobj1 = new JSONObject(result);
        str=jobj1.getString("thumb").toString();
        str1=jobj1.getString("video").toString();
    }catch(JSONException e){
            Log.d("EX", e.toString());
    }`

并从我之前在后台执行的 getData 中删除 JSON 解析。

于 2014-12-19T08:57:32.400 回答
0

该错误意味着您没有收到任何 JSON,我建议您记录您的数据。

String input = b_entity.getContent().toString();
Log.d("log_tag", "input = " + input.toString());
JSONObject jobj1 = new JSONObject(input);
Log.d("log_tag", "json = " + jobj1.toString());
于 2014-12-12T09:10:55.477 回答
0

尝试这个。

// Create new Socket
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse response = client.execute(httpGet);
HttpEntity entity = response.getEntity();
// Start streaming
InputStream is = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);
// Initialize Line
String line = null;
// Start reading
while ((line = reader.readLine()) != null)
{
    JSONObject reader = new JSONObject(line);
    url_thmb = reader.getString("thumb");
    url_vdo = reader.getString("video");
}

编辑 :

这是不可能的,因为我刚刚运行了该代码并且输出如下。检查您的 Json 文件或代码。

输出是:

12-12 18:27:41.433: I/Choreographer(12476): Skipped 58 frames!  The application may be doing too much work on its main thread.
12-12 18:27:48.300: I/System.out(12476): URL_TMB = 01 URL_VDO = 001
12-12 18:27:52.355: I/System.out(12476): URL_TMB = 02 URL_VDO = 002
12-12 18:27:53.472: I/System.out(12476): URL_TMB = 03 URL_VDO = 003
12-12 18:27:54.394: I/System.out(12476): URL_TMB = 04 URL_VDO = 004
12-12 18:27:55.394: I/System.out(12476): URL_TMB = 05 URL_VDO = 005
12-12 18:27:56.324: I/System.out(12476): URL_TMB = 06 URL_VDO = 006
12-12 18:27:59.371: I/System.out(12476): URL_TMB = 07 URL_VDO = 007
12-12 18:28:00.316: I/System.out(12476): URL_TMB = 08 URL_VDO = 008
12-12 18:28:01.269: I/System.out(12476): URL_TMB = 09 URL_VDO = 009
12-12 18:28:11.105: W/jdwp(12476): Debugger is telling the VM to exit with code=1
12-12 18:28:11.105: I/dalvikvm(12476): GC lifetime allocation: 7948 bytes

编辑 2:这是另一个测试输出。(我必须将 xyz 更改为 example,因为 SOF 测试编辑器不允许我使用它。)

12-13 02:14:45.711: I/System.out(18424): url_thmb = http://example.com/intern/ajnk/thumb.jpg url_vdo = http://example.com/intern/ajnk/vid.mp4
12-13 02:14:46.610: D/lights(273): set_light_backlight: brightness=20
12-13 02:14:49.640: I/ActivityManager(273): Start proc com.sonyericsson.appshare for service com.sonyericsson.appshare/.backend.synchronization.SyncService: pid=18529 uid=10024 gids={3003, 1015}
12-13 02:14:49.750: D/dalvikvm(17648): GC_EXPLICIT freed 319K, 50% free 3396K/6791K, external 1685K/2133K, paused 111ms
于 2014-12-12T08:55:54.247 回答