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