JSON对象空Android异步任务
我想使用一个rest服务,下载json并将其放入一个对象中,然后返回它,但该对象总是返回null,这是类:JSON对象空Android异步任务,android,json,rest,Android,Json,Rest,我想使用一个rest服务,下载json并将其放入一个对象中,然后返回它,但该对象总是返回null,这是类: public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String json = ""; Context ctx; // constructor public JSONParser(Context ctx) { this.ctx = ctx;
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
Context ctx;
// constructor
public JSONParser(Context ctx) {
this.ctx = ctx;
}
public JSONObject getJSONFromUrl(String url) {
AsyncjSONTask task = new AsyncjSONTask();
task.execute(url);
return jObj;
}
private class AsyncjSONTask extends AsyncTask<String, Void, JSONObject>{
@Override
protected JSONObject doInBackground(String... params) {
String url = params[0];
InputStream is = null;
// 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();
}
JSONObject jObjOut = null;
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 {
jObjOut = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
return jObjOut;
}
@Override
protected void onPostExecute(JSONObject jObjIn) {
jObj = jObjIn;
}
}
}
公共类JSONParser{
静态InputStream为空;
静态JSONObject jObj=null;
静态字符串json=“”;
上下文ctx;
//建造师
公共JSONParser(上下文ctx){
this.ctx=ctx;
}
公共JSONObject getJSONFromUrl(字符串url){
AsyncjSONTask任务=新建AsyncjSONTask();
task.execute(url);
返回jObj;
}
私有类AsyncjSONTask扩展了AsyncTask{
@凌驾
受保护的JSONObject doInBackground(字符串…参数){
字符串url=params[0];
InputStream=null;
//发出HTTP请求
试一试{
//defaultHttpClient
DefaultHttpClient httpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(url);
HttpResponse HttpResponse=httpClient.execute(httpPost);
HttpEntity HttpEntity=httpResponse.getEntity();
is=httpEntity.getContent();
}捕获(不支持的编码异常e){
e、 printStackTrace();
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
JSONObject jObjOut=null;
试一试{
BufferedReader reader=新的BufferedReader(新的InputStreamReader(is,“iso-8859-1”),8;
StringBuilder sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
is.close();
json=sb.toString();
}捕获(例外e){
Log.e(“缓冲区错误”,“错误转换结果”+e.toString());
}
//尝试将字符串解析为JSON对象
试一试{
jObjOut=新的JSONObject(json);
}捕获(JSONException e){
Log.e(“JSON解析器”,“错误解析数据”+e.toString());
}
返回jObjOut;
}
@凌驾
受保护的void onPostExecute(JSONObject jObjIn){
jObj=jObjIn;
}
}
}
如果有其他方式使用rest服务,请告诉我
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
new AsyncJsonTask(this).execute();
}
public void doSomethingWithTheResult(JsonObject result) {
// Show the result on the View or do whatever with it.
}
private class AsyncJsonTask extends AsyncTask<String, Void, JsonObject> {
private MainActivity _activity;
public AsyncJsonTask(MainActivity activity) {
this._activity = activity;
}
@Override
protected JsonObject doInBackground(String... params) {
JsonObject outputObject = null;
// Call your web service to return the output
// ...
return outputObject
}
@Override
protected void onPostExecute(JsonObject result) {
_activity.doSomethingWithTheResult(result);
}
}
}
公共类MainActivity扩展活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
新建AsyncJsonTask(this.execute();
}
公共无效DoSomething及其结果(JsonObject结果){
//在视图上显示结果或对其执行任何操作。
}
私有类AsyncJsonTask扩展了AsyncTask{
私人活动(main activity);;
公共AsyncJsonTask(主活动){
这个。_活动=活动;
}
@凌驾
受保护的JsonObject doInBackground(字符串…参数){
JsonObject outputObject=null;
//调用web服务以返回输出
// ...
返回输出对象
}
@凌驾
受保护的void onPostExecute(JsonObject结果){
_活动、剂量和结果(结果);
}
}
}
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
new AsyncJsonTask(this).execute();
}
public void doSomethingWithTheResult(JsonObject result) {
// Show the result on the View or do whatever with it.
}
private class AsyncJsonTask extends AsyncTask<String, Void, JsonObject> {
private MainActivity _activity;
public AsyncJsonTask(MainActivity activity) {
this._activity = activity;
}
@Override
protected JsonObject doInBackground(String... params) {
JsonObject outputObject = null;
// Call your web service to return the output
// ...
return outputObject
}
@Override
protected void onPostExecute(JsonObject result) {
_activity.doSomethingWithTheResult(result);
}
}
}
公共类MainActivity扩展活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
新建AsyncJsonTask(this.execute();
}
公共无效DoSomething及其结果(JsonObject结果){
//在视图上显示结果或对其执行任何操作。
}
私有类AsyncJsonTask扩展了AsyncTask{
私人活动(main activity);;
公共AsyncJsonTask(主活动){
这个。_活动=活动;
}
@凌驾
受保护的JsonObject doInBackground(字符串…参数){
JsonObject outputObject=null;
//调用web服务以返回输出
// ...
返回输出对象
}
@凌驾
受保护的void onPostExecute(JsonObject结果){
_活动、剂量和结果(结果);
}
}
}
日志中是否有错误?为什么不进行调试并找出它为空的原因?另外,您似乎正在执行Http POST,您确定您想要的是Http POST而不是GET吗?日志中是否有任何错误?为什么不调试它并找出它为Null的原因?另外,您似乎正在执行Http POST,您确定您想要的是Http POST而不是GET吗?好的,问题在于GET,现在我可以调试并探索响应,但是,我仍然得到null:S edit:i看到调试在doinbackgraund之前返回了对象。。。“我怎样才能解决这个问题?”埃德加。你的代码搞乱了。在调用Async方法之后,直接返回obj。您应该在onPostExecute()方法中进行后期处理。@Edgar请参阅我的更新版本