在JSON解析添加的AsyncTask [英] add AsyncTask in JSON parse
问题描述
我是一个新的Android和 我想,以显示我从服务器通过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;
- 现在,你执行这个类添加
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;
- 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屋!