这是我从一个网址获取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文件的好主意。
如果有其他解决方案,请分享一下。
答案 0 :(得分:1)
AsyncTask.execute()方法的返回类型始终是AsyncTask类型,而不是您的子类Json - 这就是您收到错误的原因。
所以它应该是
AsyncTask<Void, Void, JSONObject> fs = new Json(s, new Json.AsyncResponse(){
...
答案 1 :(得分:0)
我认为你有两个明显的问题:
delegate
,没有同步。这是不正确的。delegate.processFinished
中致电onPreExecute
。我想你打算在onPostExecute
至于Incompatible Type
错误,很难说,因为您的商家信息中没有任何类,名为MyJson
,也没有完整的错误消息。
答案 2 :(得分:-1)
看看this问题和我的回答我相信它会帮助你很多。由于AsyncTask不再用于http请求。