Android 单击片段中的GridView时显示进度对话框

Android 单击片段中的GridView时显示进度对话框,android,android-asynctask,progressdialog,Android,Android Asynctask,Progressdialog,我想在用户单击片段中的gridview时显示ProgressDialog。在加载下一个活动之前,必须显示ProgressDialog。我有谷歌很多次,也有很多次,但不能像我的问题一样精确地解决。直到我的工作完成 我的片段类: @TargetApi(11) public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); gridView.s

我想在用户单击片段中的gridview时显示ProgressDialog。在加载下一个活动之前,必须显示ProgressDialog。我有谷歌很多次,也有很多次,但不能像我的问题一样精确地解决。直到我的工作完成

我的片段类:

@TargetApi(11)
public void onActivityCreated(Bundle savedInstanceState)
{
    super.onActivityCreated(savedInstanceState);
    gridView.setAdapter(new ImageAdapterTwo(Constant.getContext(),countries1));
    gridView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v,
            int position, long id) {
        System.out.print("gridView.getId();=="+gridView.getId()) ;
        if(v==null)
        {
            System.out.print("gridView.getId();=="+gridView.getId()) ;
        }
        else
        {
            TextView t=(TextView) v.findViewById(R.id.grid_item_text);
            if(t==null)
            {
                System.out.print("gridView.getId();==") ;
            }
            else
            {
                if(t.getText()=="")
                {
                    new Task().execute();
                }
                else if(t.getText()=="")
                {
                    Intent i2 = new Intent(Constant.getContext(), ServerBackup.class);  
                    startActivity(i2);
                }
                else if(t.getText()=="")
                {
                    Intent i2 = new Intent(Constant.getContext(), ServerBackup.class);  
                    startActivity(i2);
                }
                else
                {
                    Intent i2 = new Intent(Constant.getContext(), ViewPagerFragmentActivity.class);  
                    startActivity(i2);
                }
            }
        }
    }
});
}
日志:

11-16 14:03:31.744: E/AndroidRuntime(2246): FATAL EXCEPTION: main
11-16 14:03:31.744: E/AndroidRuntime(2246): java.lang.NullPointerException
11-16 14:03:31.744: E/AndroidRuntime(2246):     at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:132)
11-16 14:03:31.744: E/AndroidRuntime(2246):     at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:65)
11-16 14:03:31.744: E/AndroidRuntime(2246):     at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
11-16 14:03:31.744: E/AndroidRuntime(2246):     at android.app.AlertDialog.<init>(AlertDialog.java:98)
11-16 14:03:31.744: E/AndroidRuntime(2246):     at android.app.ProgressDialog.<init>(ProgressDialog.java:77)
11-16 14:03:31.744: E/AndroidRuntime(2246):     at com.net.elderlyhealth.weather.AsyncClass.showProgressDialog(AsyncClass.java:33)
11-16 14:03:31.744: E/AndroidRuntime(2246):     at com.net.elderlyhealth.weather.AsyncClass.showLoadingProgressDialog(AsyncClass.java:26)
11-16 14:03:31.744: E/AndroidRuntime(2246):     at com.net.elderlyhealth.weather.Task.onPreExecute(Task.java:24)
11-16 14:03:31.744: E/AndroidRuntime(2246):     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561)
11-16 14:03:31.744: E/AndroidRuntime(2246):     at android.os.AsyncTask.execute(AsyncTask.java:511)
11-16 14:03:31.744: E/AndroidRuntime(2246):     at com.net.elderlyhealth.view.SampleGridTwoFragment$1.onItemClick(SampleGridTwoFragment.java:126)
11-16 14:03:31.744: E/AndroidRuntime(2246):     at android.widget.AdapterView.performItemClick(AdapterView.java:292)
11-16 14:03:31.744: E/AndroidRuntime(2246):     at android.widget.AbsListView.performItemClick(AbsListView.java:1058)
11-16 14:03:31.744: E/AndroidRuntime(2246):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514)
11-16 14:03:31.744:E/AndroidRuntime(2246):致命异常:main
11-16 14:03:31.744:E/AndroidRuntime(2246):java.lang.NullPointerException
11-16 14:03:31.744:E/AndroidRuntime(2246):位于android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:132)
11-16 14:03:31.744:E/AndroidRuntime(2246):在android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:65)
11-16 14:03:31.744:E/AndroidRuntime(2246):位于android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)
11-16 14:03:31.744:E/AndroidRuntime(2246):在android.app.AlertDialog.(AlertDialog.java:98)
11-16 14:03:31.744:E/AndroidRuntime(2246):在android.app.ProgressDialog.(ProgressDialog.java:77)
11-16 14:03:31.744:E/AndroidRuntime(2246):位于com.net.elderlyhealth.weather.AsyncClass.showProgressDialog(AsyncClass.java:33)
11-16 14:03:31.744:E/AndroidRuntime(2246):位于com.net.elderlyhealth.weather.AsyncClass.showLoadingProgressDialog(AsyncClass.java:26)
11-16 14:03:31.744:E/AndroidRuntime(2246):位于com.net.elderlyhealth.weather.Task.onPreExecute(Task.java:24)
11-16 14:03:31.744:E/AndroidRuntime(2246):位于android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561)
11-16 14:03:31.744:E/AndroidRuntime(2246):在android.os.AsyncTask.execute(AsyncTask.java:511)
11-16 14:03:31.744:E/AndroidRuntime(2246):在com.net.elderlyhealth.view.SampleGridTwoFragment$1.onItemClick(SampleGridTwoFragment.java:126)
11-16 14:03:31.744:E/AndroidRuntime(2246):在android.widget.AdapterView.performItemClick(AdapterView.java:292)
11-16 14:03:31.744:E/AndroidRuntime(2246):在android.widget.AbsListView.performItemClick(AbsListView.java:1058)
11-16 14:03:31.744:E/AndroidRuntime(2246):在android.widget.AbsListView$PerformClick.run(AbsListView.java:2514)
我错在哪里

public void showProgressDialog(CharSequence message)
{
    progressDialog = new ProgressDialog(this);
        if (progressDialog == null)
        {

            progressDialog.setIndeterminate(true);
        }

        progressDialog.setMessage(message);
        progressDialog.show();
    }

    public void dismissProgressDialog()
    {
        if (progressDialog != null && !destroyed)
        {
            progressDialog.dismiss();
        }
    }
    }
在初始化ProgressDialog之前,请检查条件以显示它们为您提供的 空指针异常


修改了异步任务的代码

import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.util.Log;

import com.net.elderlyhealth.weather.AsyncClass;


public class Task extends AsyncTask<Void, Void, String>
{
Activity currentActivity;
ProgressDialog dialog;
public Task(Activity activity)
{
currentActivity = activity;
}

@Override
protected void onPreExecute()
{
dialog=ProgressDialog.show(currentActivity, "Title", "Msg");
}

@Override
protected String doInBackground(Void... params)
{
//do your work
}

@Override
protected void onPostExecute(String params)
{
dialog.dismiss();
}
}
导入android.content.Context;
导入android.content.Intent;
导入android.os.AsyncTask;
导入android.util.Log;
导入com.net.elderlyhealth.weather.AsyncClass;
公共类任务扩展了异步任务
{
活动当前活动;
进程对话;
公共任务(活动)
{
当前活动=活动;
}
@凌驾
受保护的void onPreExecute()
{
dialog=ProgressDialog.show(当前活动,“标题”,“消息”);
}
@凌驾
受保护字符串doInBackground(无效…参数)
{
//做你的工作
}
@凌驾
受保护的void onPostExecute(字符串参数)
{
dialog.dismise();
}
}
调用异步任务

import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.util.Log;

import com.net.elderlyhealth.weather.AsyncClass;


public class Task extends AsyncTask<Void, Void, String>
{
Activity currentActivity;
ProgressDialog dialog;
public Task(Activity activity)
{
currentActivity = activity;
}

@Override
protected void onPreExecute()
{
dialog=ProgressDialog.show(currentActivity, "Title", "Msg");
}

@Override
protected String doInBackground(Void... params)
{
//do your work
}

@Override
protected void onPostExecute(String params)
{
dialog.dismiss();
}
}
新任务(getActivity()).execute()

这应该能解决你的问题。
请记住,您不能只是实例化一个扩展活动的类并期望它执行UI操作。

AsyncClass是您的活动,您不能这样做。
AsyncClass AsyncClass=new AsyncClass()
@Atrix1987:那么还有其他方法吗?您可以在
新建任务()之前调用showProgressDialog。execute()。我假设您当前的活动是AsyncClass。@Atrix1987:AsyncClass只是一个扩展活动的类,它没有布局。@Atrix1987:不能在new Task().execute()之前调用showProgressDialog,因为它是片段,而不是活动。此外,在我的项目中,它是action类,我不能…工作得很好,但是得到了一个新的异常
11-16 16:48:36.685:E/AndroidRuntime(13518):致命异常:AsyncTask#11-16 16:48:36.685:E/AndroidRuntime(13518):java.lang.RuntimeException:再次执行doInBackground()时出错,一开始我没有注意到。你为什么要在后台开始一项活动???让我们来看看
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.util.Log;

import com.net.elderlyhealth.weather.AsyncClass;


public class Task extends AsyncTask<Void, Void, String>
{
Activity currentActivity;
ProgressDialog dialog;
public Task(Activity activity)
{
currentActivity = activity;
}

@Override
protected void onPreExecute()
{
dialog=ProgressDialog.show(currentActivity, "Title", "Msg");
}

@Override
protected String doInBackground(Void... params)
{
//do your work
}

@Override
protected void onPostExecute(String params)
{
dialog.dismiss();
}
}