在JSON解析添加的AsyncTask [英] add AsyncTask in JSON parse

查看:290
本文介绍了在JSON解析添加的AsyncTask的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是一个新的Andr​​oid和 我想,以显示我从服务器通过json.I获取数据使用lazylist与JSONparser.my应用程序在Android 2.3的工作,但在4.0 ..所以我尝试添加的AsyncTask在我的code。  而我的code是:

 包dlmbg.pckg.tampil.gambar;

进口java.io.BufferedReader中;
进口java.io.IOException异常;
进口的java.io.InputStream;
进口java.io.InputStreamReader中;
进口java.io.UnsupportedEncodingException;

进口org.apache.http.HttpEntity;
进口org.apache.http.Htt presponse;
进口org.apache.http.client.ClientProtocolException;
进口org.apache.http.client.methods.HttpPost;
进口org.apache.http.impl.client.DefaultHttpClient;
进口org.json.JSONException;
进口org.json.JSONObject;

进口android.util.Log;

公共类JSONParser {

    静态的InputStream是= NULL;
    静态的JSONObject jObj = NULL;
    静态JSON字符串=;

    //构造
    公共JSONParser(){

    }

    公众的JSONObject AmbilJson(字符串URL){

        //使HTTP请求
        尝试 {
            // defaultHttpClient
            DefaultHttpClient的HttpClient =新DefaultHttpClient();
            HttpPost httpPost =新HttpPost(URL);

            HTT presponse HTT presponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = HTT presponse.getEntity();
            是= httpEntity.getContent();

        }赶上(UnsupportedEncodingException E){
            e.printStackTrace();
        }赶上(ClientProtocolException E){
            e.printStackTrace();
        }赶上(IOException异常E){
            e.printStackTrace();
        }

        尝试 {
            的BufferedReader读卡器=新的BufferedReader(新的InputStreamReader(
                    是,ISO-8859-1),8);
            StringBuilder的SB =新的StringBuilder();
            串线= NULL;
            而((行= reader.readLine())!= NULL){
                sb.append(行+\ N);
            }
            is.close();
            JSON = sb.toString();
        }赶上(例外五){
            Log.e(缓冲区错误,转换的结果错误+ e.toString());
        }

        //尝试解析字符串到一个JSON对象
        尝试 {
            jObj =新的JSONObject(JSON);
        }赶上(JSONException E){
            Log.e(JSON解析器,错误分析数据+ e.toString());
        }

        //返回JSON字符串
        返回jObj;

    }
}
 

当我运行在4.0,其误差

 十二月11日至一号:16:19.063:E / AndroidRuntime(623):致命异常:主要
12月11号至1日:16:19.063:E / AndroidRuntime(623):java.lang.RuntimeException的:无法启动的活动ComponentInfo {dlmbg.pckg.tampil.gambar / dlmbg.pckg.tampil.gambar.TampilkanGambarActivity}:android.os .NetworkOnMainThreadException
12月11号至1日:16:19.063:E / AndroidRuntime(623):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在android.app.ActivityThread.access $ 600(ActivityThread.java:123)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1147)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在android.os.Handler.dispatchMessage(Handler.java:99)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在android.os.Looper.loop(Looper.java:137)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在android.app.ActivityThread.main(ActivityThread.java:4424)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在java.lang.reflect.Method.invokeNative(本机方法)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在java.lang.reflect.Method.invoke(Method.java:511)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在dalvik.system.NativeStart.main(本机方法)
12月11号至1日:16:19.063:E / AndroidRuntime(623):由:android.os.NetworkOnMainThreadException
12月11号至1日:16:19.063:E / AndroidRuntime(623):在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在java.net.InetAddress.lookupHostByName(InetAddress.java:391)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在java.net.InetAddress.getAllByName(InetAddress.java:220)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在dlmbg.pckg.tampil.gambar.JSONParser.AmbilJson(JSONParser.java:38)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在dlmbg.pckg.tampil.gambar.TampilkanGambarActivity.onCreate(TampilkanGambarActivity.java:38)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在android.app.Activity.performCreate(Activity.java:4465)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12月11号至1日:16:19.063:E / AndroidRuntime(623):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
12月11号至1日:16:19.063:E / AndroidRuntime(623):11 ...更多
 

我不知道我必须投入的AsyncTask 任何人都可以帮助我?

解决方案

1。首先你定义类并创建类的对象

  MyFirstMethod myfirst;
 

  1. 现在,你执行这个类添加
  

myfirst =新MyFirstMethod();

     

myfirst.execute(网址);

 公共类MyFirstMethod扩展的AsyncTask<字符串,太虚,字符串> {
            ProgressDialog对话框;

            @覆盖
            在preExecute保护无效(){
                super.on preExecute();
                对话框=新ProgressDialog(上下文);
                dialog.setMessage(加载......);
                dialog.show();
            }

            @覆盖
            保护字符串doInBackground(字符串... PARAMS){
                字符串URL = PARAMS [0];
                尝试 {
                    DefaultHttpClient的HttpClient =新DefaultHttpClient();
                    HTTPGET HTTPGET =新HTTPGET(URL);
                    ResponseHandler的<字符串> resHandler =新BasicResponseHandler();
                    字符串页= httpClient.execute(HTTPGET,resHandler);
                    Log.d(结果,页);

                }赶上(例外五){
                    e.printStackTrace();
                }

                返回null;
            }

            @覆盖
            保护无效onPostExecute(字符串结果){

                super.onPostExecute(结果);
                dialog.dismiss();
                dialog.cancel();


            }

        }
 

I am a new in android and I am trying to display data that I am getting from server through json.I use lazylist with JSONparser.my app its work on android 2.3 but on 4.0 ..so i trying to add AsyncTask in my code. And my code is:

package dlmbg.pckg.tampil.gambar;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    public JSONObject AmbilJson(String url) {

        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();           

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}

when i run in 4.0,its error

11-01 12:16:19.063: E/AndroidRuntime(623): FATAL EXCEPTION: main
11-01 12:16:19.063: E/AndroidRuntime(623): java.lang.RuntimeException: Unable to start activity ComponentInfo{dlmbg.pckg.tampil.gambar/dlmbg.pckg.tampil.gambar.TampilkanGambarActivity}: android.os.NetworkOnMainThreadException
11-01 12:16:19.063: E/AndroidRuntime(623):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
11-01 12:16:19.063: E/AndroidRuntime(623):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
11-01 12:16:19.063: E/AndroidRuntime(623):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
11-01 12:16:19.063: E/AndroidRuntime(623):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
11-01 12:16:19.063: E/AndroidRuntime(623):  at android.os.Handler.dispatchMessage(Handler.java:99)
11-01 12:16:19.063: E/AndroidRuntime(623):  at android.os.Looper.loop(Looper.java:137)
11-01 12:16:19.063: E/AndroidRuntime(623):  at android.app.ActivityThread.main(ActivityThread.java:4424)
11-01 12:16:19.063: E/AndroidRuntime(623):  at java.lang.reflect.Method.invokeNative(Native Method)
11-01 12:16:19.063: E/AndroidRuntime(623):  at java.lang.reflect.Method.invoke(Method.java:511)
11-01 12:16:19.063: E/AndroidRuntime(623):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-01 12:16:19.063: E/AndroidRuntime(623):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-01 12:16:19.063: E/AndroidRuntime(623):  at dalvik.system.NativeStart.main(Native Method)
11-01 12:16:19.063: E/AndroidRuntime(623): Caused by: android.os.NetworkOnMainThreadException
11-01 12:16:19.063: E/AndroidRuntime(623):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
11-01 12:16:19.063: E/AndroidRuntime(623):  at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
11-01 12:16:19.063: E/AndroidRuntime(623):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
11-01 12:16:19.063: E/AndroidRuntime(623):  at java.net.InetAddress.getAllByName(InetAddress.java:220)
11-01 12:16:19.063: E/AndroidRuntime(623):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
11-01 12:16:19.063: E/AndroidRuntime(623):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
11-01 12:16:19.063: E/AndroidRuntime(623):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
11-01 12:16:19.063: E/AndroidRuntime(623):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
11-01 12:16:19.063: E/AndroidRuntime(623):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
11-01 12:16:19.063: E/AndroidRuntime(623):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
11-01 12:16:19.063: E/AndroidRuntime(623):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
11-01 12:16:19.063: E/AndroidRuntime(623):  at dlmbg.pckg.tampil.gambar.JSONParser.AmbilJson(JSONParser.java:38)
11-01 12:16:19.063: E/AndroidRuntime(623):  at dlmbg.pckg.tampil.gambar.TampilkanGambarActivity.onCreate(TampilkanGambarActivity.java:38)
11-01 12:16:19.063: E/AndroidRuntime(623):  at android.app.Activity.performCreate(Activity.java:4465)
11-01 12:16:19.063: E/AndroidRuntime(623):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
11-01 12:16:19.063: E/AndroidRuntime(623):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
11-01 12:16:19.063: E/AndroidRuntime(623):  ... 11 more

I dont know where i must put AsyncTask Can anyone helps me?

解决方案

1.First you define class and create object of class

 MyFirstMethod myfirst;

  1. Now you execute this class adding

myfirst=new MyFirstMethod();

myfirst.execute(your url);

public class MyFirstMethod extends AsyncTask<String, Void, String> {
            ProgressDialog dialog;

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                dialog = new ProgressDialog(context);
                dialog.setMessage("Loading....");
                dialog.show();
            }

            @Override
            protected String doInBackground(String... params) {
                String url = params[0];
                try {
                    DefaultHttpClient httpClient = new DefaultHttpClient();
                    HttpGet httpGet = new HttpGet(url);
                    ResponseHandler<String> resHandler = new  BasicResponseHandler();
                    String page = httpClient.execute(httpGet, resHandler);
                    Log.d("result", page);

                } catch (Exception e) {
                    e.printStackTrace();
                }

                return null;
            }

            @Override
            protected void onPostExecute(String result) {

                super.onPostExecute(result);
                dialog.dismiss();
                dialog.cancel();


            }

        }

这篇关于在JSON解析添加的AsyncTask的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆