Android 如何将主活动发送到片段java类内部的内部类?

Android 如何将主活动发送到片段java类内部的内部类?,android,android-fragments,android-activity,nullpointerexception,inner-classes,Android,Android Fragments,Android Activity,Nullpointerexception,Inner Classes,我得到了一个gridview,我正在用一个ASyncTask“内部”类填充项。我的innerclass的父类正在扩展fragment。当然,这个片段也会出现在刷页面的主要活动中。我必须将活动发送到内部类以获取progressDialog和其他内容。我试着用一些词来解释这一点,但每次我在logcat中得到NullPointerException错误。请帮帮我,伙计们。所有片段类代码就在下面 import android.app.Activity; import android.app.Progre

我得到了一个gridview,我正在用一个ASyncTask“内部”类填充项。我的innerclass的父类正在扩展fragment。当然,这个片段也会出现在刷页面的主要活动中。我必须将活动发送到内部类以获取progressDialog和其他内容。我试着用一些词来解释这一点,但每次我在logcat中得到NullPointerException错误。请帮帮我,伙计们。所有片段类代码就在下面

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;


/**
 * A simple {@link Fragment} subclass.
 */
public class FragmentB extends Fragment {



    public FragmentB() {
        // Required empty public constructor
    }

    private ProgressDialog pDialog;
    private String url = "http://**********.com/api.asp?cmd=resdok&gore=tarih&kategori=all";

    //JSON NODLAR
    public static final String POST_ID = "id";
    public static final String FOTOYOL = "img";

    ArrayList<HashMap<String, String>> WallPaperList = new ArrayList<HashMap<String, String>>();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_b, container, false);


        if (isConnected()){
            **// HERE IMPORTANT I THINK !**
            new ProgressTask(**v.getContext()**).execute();
        }
        else
        {
            Toast.makeText(v.getContext(),"Please check your internet connection..!",Toast.LENGTH_LONG).show();
        }

        /*
        GridView g = (GridView)v.findViewById(R.id.gridview);
        g.setAdapter(new AdapterB(v.getContext(),WallPaperList));
        */

        return v;
    }

    public boolean isConnected(){
        ConnectivityManager connMgr = (ConnectivityManager) getActivity().getSystemService(Activity.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isConnected())
            return true;
        else
            return false;
    }


    private class ProgressTask extends AsyncTask<String,Void,Boolean>{
        private ProgressDialog progressDialog;
        private Context mContext;
        final AdapterB adapter = new AdapterB(mContext,WallPaperList);


        public ProgressTask(Activity activity)
        {
            **//AND HERE !!**
            this.mContext = activity;
            progressDialog = new ProgressDialog(mContext);
        }

        protected void onPreExecute() {
            this.progressDialog.setMessage("Please Wait");
            this.progressDialog.setCancelable(false);
            this.progressDialog.show();
        }

        @Override
        protected void onPostExecute(final Boolean success)
        {
            if (progressDialog.isShowing())
            {
                progressDialog.dismiss();
            }
        }

        protected Boolean doInBackground(final String... args)
        {
            JSONParser jsonParser = new JSONParser();
            JSONArray json  = jsonParser.getJSONArrayFromUrl(url);
            for (int i = 0;i < json.length(); i++)
            {
                try
                {
                    JSONObject c = json.getJSONObject(i);
                    String image = c.getString(FOTOYOL);
                    String id = c.getString(POST_ID);

                    HashMap<String,String> map = new HashMap<String,String>();
                    map.put(POST_ID, id);
                    map.put(FOTOYOL, image);

                    WallPaperList.add(map);
                }
                catch (JSONException e)
                {
                    e.printStackTrace();
                }

            }
            return null;
        }

    }
}
导入android.app.Activity;
导入android.app.ProgressDialog;
导入android.content.Context;
导入android.net.ConnectivityManager;
导入android.net.NetworkInfo;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.support.v4.app.Fragment;
导入android.support.v4.app.FragmentActivity;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.GridView;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.ArrayList;
导入java.util.HashMap;
/**
*一个简单的{@link Fragment}子类。
*/
公共类FragmentB扩展了Fragment{
公共碎片b(){
//必需的空公共构造函数
}
私人对话;
私有字符串url=“http://*********.com/api.asp?cmd=resdok&gore=tarih&kategori=all”;
//JSON节点
公共静态最终字符串POST_ID=“ID”;
公共静态最终字符串FOTOYOL=“img”;
ArrayList壁纸列表=新建ArrayList();
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图v=充气机。充气(R.layout.fragment_b,容器,假);
如果(断开连接()){
**//我认为这里很重要**
新建ProgressTask(**v.getContext()**)。执行();
}
其他的
{
Toast.makeText(v.getContext(),“请检查您的internet连接…”,Toast.LENGTH\u LONG.show();
}
/*
GridView g=(GridView)v.findviewbyd(R.id.GridView);
g、 setAdapter(新适配器B(v.getContext(),wallperList));
*/
返回v;
}
公共布尔值未连接(){
ConnectivityManager connMgr=(ConnectivityManager)getActivity().getSystemService(Activity.CONNECTIVITY_服务);
NetworkInfo NetworkInfo=connMgr.getActiveNetworkInfo();
if(networkInfo!=null&&networkInfo.isConnected())
返回true;
其他的
返回false;
}
私有类ProgressTask扩展了AsyncTask{
私有进程对话;
私有上下文;
最终适配器B适配器=新适配器B(mContext,壁纸列表);
公共进度任务(活动)
{
**//还有这里**
this.mContext=活动;
progressDialog=新建progressDialog(mContext);
}
受保护的void onPreExecute(){
此.progressDialog.setMessage(“请稍候”);
this.progressDialog.setCancelable(false);
这个.progressDialog.show();
}
@凌驾
受保护的void onPostExecute(最终布尔值成功)
{
if(progressDialog.isShowing())
{
progressDialog.disclose();
}
}
受保护的布尔doInBackground(最终字符串…args)
{
JSONParser JSONParser=新的JSONParser();
JSONArray json=jsonParser.getJSONArrayFromUrl(url);
for(int i=0;i
首先,doInBackground应该返回一个布尔值,它返回null。您的错误的堆栈跟踪是什么?我调试它,当行命中内部类ProgressTask方法时,我给出空指针异常错误当您设置final AdapterB adapter=new AdapterB(mContext,WallperList)时,mContext尚未初始化,所以它为空。我如何初始化?你能解释更多吗?最终适配器B适配器;然后在构造函数中do adapter=newadapterb(mContext,壁纸列表)