如何在片段中使用GetJsonFromUrlTask.java
我从一个网站上找到了下面的代码,它似乎对我的android应用程序有所帮助。但问题是,下面的代码仅用于活动,我需要在片段中运行代码。顺便说一句,我的应用程序是从在线数据库下载图像并将其存储到listview 我该怎么办 这是我要使用的代码:如何在片段中使用GetJsonFromUrlTask.java,java,android,listview,android-studio,android-fragments,Java,Android,Listview,Android Studio,Android Fragments,我从一个网站上找到了下面的代码,它似乎对我的android应用程序有所帮助。但问题是,下面的代码仅用于活动,我需要在片段中运行代码。顺便说一句,我的应用程序是从在线数据库下载图像并将其存储到listview 我该怎么办 这是我要使用的代码: public class GetJsonFromUrlTask extends AsyncTask<Void, Void, String> { private Activity activity; private String url; pri
public class GetJsonFromUrlTask extends AsyncTask<Void, Void, String> {
private Activity activity;
private String url;
private ProgressDialog dialog;
private final static String TAG = GetJsonFromUrlTask.class.getSimpleName();
public GetJsonFromUrlTask(Activity activity, String url) {
super();
this.activity = activity;
this.url = url;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// Create a progress dialog
dialog = new ProgressDialog(activity);
// Set progress dialog title
dialog.setTitle("Getting JSON DATA");
// Set progress dialog message
dialog.setMessage("Loading...");
dialog.setIndeterminate(false);
// Show progress dialog
dialog.show();
}
@Override
protected String doInBackground(Void... params) {
// call load JSON from url method
return loadJSON(this.url).toString();
}
@Override
protected void onPostExecute(String result) {
((CategoryListViewActivity) activity).parseJsonResponse(result);
dialog.dismiss();
Log.i(TAG, result);
}
public JSONArray loadJSON(String url) {
// Creating JSON Parser instance
JSONGetter jParser = new JSONGetter();
// getting JSON string from URL
JSONArray json = jParser.getJSONFromUrl(url);
return json;
}
private class JSONGetter {
private InputStream is = null;
private JSONArray jObj = null;
private String json = "";
// constructor
public JSONGetter() {
}
public JSONArray getJSONFromUrl(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 JSONArray(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
}
公共类GetJsonFromUrlTask扩展了AsyncTask{
私人活动;
私有字符串url;
私人对话;
私有最终静态字符串标记=GetJsonFromUrlTask.class.getSimpleName();
公共GetJsonFromUrlTask(活动,字符串url){
超级();
这个。活动=活动;
this.url=url;
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//创建一个进度对话框
dialog=新建进度对话框(活动);
//设置进度对话框标题
setTitle(“获取JSON数据”);
//设置进度对话框消息
setMessage(“加载…”);
dialog.setUndeterminate(false);
//显示进度对话框
dialog.show();
}
@凌驾
受保护字符串doInBackground(无效…参数){
//从url方法调用LoadJSON
返回loadJSON(this.url).toString();
}
@凌驾
受保护的void onPostExecute(字符串结果){
((CategoryListViewActivity)活动);
dialog.dismise();
Log.i(标签、结果);
}
公共JSONArray加载JSON(字符串url){
//创建JSON解析器实例
JSONGetter jParser=新的JSONGetter();
//从URL获取JSON字符串
JSONArray json=jParser.getJSONFromUrl(url);
返回json;
}
私有类JSONGetter{
私有InputStream为空;
私有JSONArray jObj=null;
私有字符串json=“”;
//建造师
公共JSONGetter(){
}
公共JSONArray getJSONFromUrl(字符串url){
//发出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();
}
试一试{
BufferedReader=新的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对象
试一试{
jObj=新的JSONArray(json);
}捕获(JSONException e){
Log.e(“JSON解析器”,“错误解析数据”+e.toString());
}
//返回JSON字符串
返回jObj;
}
}
}
在片段中使用AsyncTask有一个简单的步骤,如下所示
将代码放在activityCreateview上
new GetJsonFromUrlTask(getActivity(), mListView).execute("");
getActivity()
是在片段类中获取活动上下文的方法
注意:当您从网站上找到代码时,此代码是一个异步任务类,您可以将此代码调用到活动
,片段
,以及任何其他类
更改代码
public class GetJsonFromUrlTask extends AsyncTask<Void, Void, String> {
private Context activity;
private String url;
private ProgressDialog dialog;
private final static String TAG = GetJsonFromUrlTask.class.getSimpleName();
public GetJsonFromUrlTask(Context activity, String url) {
super();
this.activity = activity;
this.url = url;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// Create a progress dialog
dialog = new ProgressDialog(activity);
// Set progress dialog title
dialog.setTitle("Getting JSON DATA");
// Set progress dialog message
dialog.setMessage("Loading...");
dialog.setIndeterminate(false);
// Show progress dialog
dialog.show();
}
@Override
protected String doInBackground(Void... params) {
// call load JSON from url method
return loadJSON(this.url).toString();
}
@Override
protected void onPostExecute(String result) {
dialog.dismiss();
Log.i(TAG, result);
}
public JSONArray loadJSON(String url) {
// Creating JSON Parser instance
JSONGetter jParser = new JSONGetter();
// getting JSON string from URL
JSONArray json = jParser.getJSONFromUrl(url);
return json;
}
private class JSONGetter {
private InputStream is = null;
private JSONArray jObj = null;
private String json = "";
// constructor
public JSONGetter() {
}
public JSONArray getJSONFromUrl(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 JSONArray(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
}
公共类GetJsonFromUrlTask扩展了AsyncTask{
私人语境活动;
私有字符串url;
私人对话;
私有最终静态字符串标记=GetJsonFromUrlTask.class.getSimpleName();
公共GetJsonFromUrlTask(上下文活动,字符串url){
超级();
这个。活动=活动;
this.url=url;
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//创建一个进度对话框
dialog=新建进度对话框(活动);
//设置进度对话框标题
setTitle(“获取JSON数据”);
//设置进度对话框消息
setMessage(“加载…”);
dialog.setUndeterminate(false);
//显示进度对话框
dialog.show();
}
@凌驾
受保护字符串doInBackground(无效…参数){
//从url方法调用LoadJSON
返回loadJSON(this.url).toString();
}
@凌驾
受保护的void onPostExecute(字符串结果){
dialog.dismise();
Log.i(标签、结果);
}
公共JSONArray加载JSON(字符串url){
//创建JSON解析器实例
JSONGetter jParser=新的JSONGetter();
//从URL获取JSON字符串
JSONArray json=jParser.getJSONFromUrl(url);
返回json;
}
私有类JSONGetter{
私有InputStream为空;
私有JSONArray jObj=null;
私有字符串json=“”;
//建造师
公共JSONGetter(){
}
公共JSONArray getJSONFromUrl(字符串url){
//发出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();
}
试一试{
BufferedReader=新的BufferedReader(新的InputStreamReader(is,“iso-8859-1”),
8);
StringBuilder sb=新的StringBuilder();
字符串行=null;