执行

时间:2016-08-20 15:05:29

标签: java android android-asynctask

这是我从一个网址获取Json的课程:

public class Json extends AsyncTask<Void , Void, JSONObject > {

String theUrl;
public AsyncResponse delegate = null;
InputStream is = null;
String result = "";
JSONObject jsonObject = null;
StringBuilder stringBuilder;
URLConnection urlConnection;
BufferedReader reader;

public Json(String theUrl , AsyncResponse delegate) {
   this.theUrl = theUrl;
   this.delegate = delegate;
}


public interface AsyncResponse {
    void processFinish(JSONObject output);
}


@Override
protected JSONObject doInBackground(Void... params) {
    try {
        URL url = new URL(theUrl);
        urlConnection = url.openConnection();

    } catch(Exception e) {
        Log.d("Fff22", " " +e);
        return null;
    }
    // Read response to string
    try {
        reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }

        result = sb.toString();

    } catch(Exception e) {

        return null;
    }

    // Convert string to object
    try {
        jsonObject = new JSONObject(result);
    } catch(JSONException e) {
        return null;
    }

    return jsonObject;
}



@Override
protected void onPostExecute(JSONObject jsonObject) {
     delegate.processFinish(jsonObject);
}

@Override
protected void onProgressUpdate(Void... values) {
    super.onProgressUpdate(values);
}

@Override
protected void onCancelled(JSONObject jsonObject) {
    super.onCancelled(jsonObject);
}

@Override
protected void onCancelled() {
    super.onCancelled();
}


 }

在我的活动中,我称之为:

 String s = "http://192.168.0.106/json/259616167dfea1870e4d0330caa0323b.json";

     Json fs = new Json(s, new Json.AsyncResponse(){
         @Override
         public void processFinish(JSONObject output) {
             Log.d("fwwwwwww ","   "+output);
         }
     }).execute();

但它全部采用红色并显示:

不兼容的类型

需要Json类

发现Anroid.os.asyncTask java.lang.void,java.lang.void,org.json.JSONObject

我在asyncTask上遇到任何帮助也有问题我也不知道获取json文件的好主意。

如果有其他解决方案,请分享一下。

3 个答案:

答案 0 :(得分:1)

AsyncTask.execute()方法的返回类型始终是AsyncTask类型,而不是您的子类Json - 这就是您收到错误的原因。

所以它应该是

AsyncTask<Void, Void, JSONObject> fs = new Json(s, new Json.AsyncResponse(){
...

答案 1 :(得分:0)

我认为你有两个明显的问题:

    从多个线程访问
  1. delegate,没有同步。这是不正确的。
  2. 您在delegate.processFinished中致电onPreExecute。我想你打算在onPostExecute
  3. 中调用它

    至于Incompatible Type错误,很难说,因为您的商家信息中没有任何类,名为MyJson,也没有完整的错误消息。

答案 2 :(得分:-1)

看看this问题和我的回答我相信它会帮助你很多。由于AsyncTask不再用于http请求。