Java 在android中实现AsyncTask和Listview的片段

Java 在android中实现AsyncTask和Listview的片段,java,android,listview,android-fragments,android-asynctask,Java,Android,Listview,Android Fragments,Android Asynctask,这是我的Java代码 但是它不起作用,我不明白我的错误。 package info.androidhive.slidingmenu; 导入java.util.ArrayList; 导入java.util.HashMap; 导入org.json.JSONArray; 导入org.json.JSONException; 导入org.json.JSONObject; 导入android.app.Fragment; 导入android.app.ProgressDialog; 导入android.os.

这是我的Java代码

但是它不起作用,我不明白我的错误。

package info.androidhive.slidingmenu;
导入java.util.ArrayList;
导入java.util.HashMap;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入android.app.Fragment;
导入android.app.ProgressDialog;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ListView;
公共类CommunityFragment扩展了片段{
公共社区片段(){}
//声明变量
JSONObject JSONObject;
JSONArray JSONArray;
列表视图列表视图;
ListViewAdapter适配器;
进程对话框;
ArrayList ArrayList;
静态字符串RANK=“RANK”;
静态字符串COUNTRY=“COUNTRY”;
静态字符串POPULATION=“POPULATION”;
静态字符串FLAG=“FLAG”;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气器。充气(R.layout.fragment\u社区,容器,false);
新建下载JSON().execute();
返回rootView;
}
//下载JSON异步任务
私有类下载JSON扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//创建一个progressdialog
mProgressDialog=newprogressdialog(CommunityFragment.this);
//设置进程对话框标题
mProgressDialog.setTitle(“学生政府应用程序”);
//设置进程对话框消息
设置消息(“加载…”);
mProgressDialog.setUndeterminate(false);
//显示进度对话框
mProgressDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…参数){
//创建一个数组
arraylist=新的arraylist();
//从给定的URL地址检索JSON对象
jsonobject=JSONFunctions
.getJSONfromURL(“http://app-dlslsg.azurewebsites.net/json/postList.php");
试一试{
//在JSON中找到数组名称
jsonarray=jsonobject.getJSONArray(“post”);
for(int i=0;i
今天我试着在网上搜索,但是我没有机会看到任何相关的问题。 有人能帮我弄清楚吗?我将尽快答复这些答复
提前感谢您的帮助

片段不是上下文。您必须在使用社区片段的地方使用
getActivity()

替换

mProgressDialog = new ProgressDialog(CommunityFragment.this);


Oke,因此存在多个错误:

  • ListViewAdapter构造函数需要一个活动(或上下文),但您正在传递一个片段。您可以使用
    Fragment.getActivity()
    获取片段的活动,但前提是它已附加
  • ProgressDialog构造函数需要一个上下文对象,但同样要传递一个片段。片段不扩展上下文,但活动类扩展上下文。同样,您可以传递
    Fragment.getActivity()
  • 最后,尝试在AsyncTask内调用
    findViewById()
    表单。这是一个仅在活动内部可用的方法,因此您同样需要获取活动并通过活动对象调用该方法

  • 你会犯什么错误?消息是什么?@JeffreyKlardie这里是一个屏幕截图,实际上AsyncTask在片段中,因此findViewById应该可以正常工作。问题是他在哪里使用了片段,在哪里需要上下文。谢谢。1.如何在我的代码中使用这个“Fragment.getActivity()”?只有
    findViewById()
    在Fragment中实现时才起作用,而实际上并非如此
    findViewById()
    仅在活动中实现。在片段中,您只需调用
    getActivity()
    注意,您也可以使用
    getView().findViewById()
    而不是
    getActivity().findViewById()
    mProgressDialog = new ProgressDialog(CommunityFragment.this);
    
    mProgressDialog = new ProgressDialog(getActivity());
    
    adapter = new ListViewAdapter(CommunityFragment.this, arraylist);
    
    adapter = new ListViewAdapter(getActivity(), arraylist);