Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 需要访问主类中的AsyncTask值_Android_Android Asynctask - Fatal编程技术网

Android 需要访问主类中的AsyncTask值

Android 需要访问主类中的AsyncTask值,android,android-asynctask,Android,Android Asynctask,我在异步任务中遇到了一个问题,有人能给我建议解决方案吗。 我已从以下链接下载了此示例: 我目前的结构是 Main类扩展MyTask并实现AsyncTaskCompleteListener接口 AsyncTaskCompleteListener是一个包含onTaskComplete方法的接口 MyTask扩展了Async Task,OnPostExecute包含CallBackMethod,它将返回从doInBackground获得的结果集 Http类(Utils)包含Http连接,并从Pos

我在异步任务中遇到了一个问题,有人能给我建议解决方案吗。
我已从以下链接下载了此示例:

我目前的结构是

  • Main类扩展MyTask并实现AsyncTaskCompleteListener接口
  • AsyncTaskCompleteListener是一个包含onTaskComplete方法的接口
  • MyTask扩展了Async Task,OnPostExecute包含CallBackMethod,它将返回从doInBackground获得的结果集
  • Http类(Utils)包含Http连接,并从PostExecute将结果集返回给AsyncTaskComleteListner
我正在尝试从接口方法获取主类中的结果集值,以执行进一步的操作。
我试图从静态变量中获取值,静态方法(但其中没有一个有效),还尝试创建一个新的类对象来发送和接收结果,但每次它都给我NullPointerException。因为AsyncTask获取后编写的语句在获取结果之前执行

我还尝试从其方法getStaus()获取asyncTask的状态,但它只返回Running,而不在任务完成或完成时通知

以下是代码示例:

主类代码:

package com.example.androidasynctask;


public class MainActivity extends Activity implements AsyncTaskCompleteListener {

public static String[] asyncResult;
String res[] = null;



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void btnclick(View view) {
    /*MyTask asyncTask = new MyTask(this);
    String [] asyncTaskResult = asyncTask.execute("fetchCategory.php","1%Id%1");*/

    //AsyncTask<String, Void, String[]> asyncTaskRes = new MyTask(this).execute("fetchCategory.php","1%Id%1");
    //new MyTask(this).execute("fetchCategory.php","1%Id%1");
    MyTask asyncTask = (MyTask) new MyTask(this).execute("fetchCategory.php","1%Id%1");

     if(asyncTask.getStatus().equals(AsyncTask.Status.FINISHED) || asyncTask.getStatus().equals(AsyncTask.Status.PENDING)) {
         asyncTask.execute();
     }
     else {

         Log.v("In Else","Get Value");
     }



}

@Override
public void onTaskComplete(String[] result) {
    Log.v("IN ON TASK COMPLETE","VALUE = "+result[1]);


}



/*@Override
public void onTaskComplete(String result) {
    System.out.println("calling onTaskComplete SIMPLE....");
    System.out.println("result :: "+ result);
}*/

public static class GetAsyncResult
{
    static String[] returnValues;


    public GetAsyncResult()
    {}
    public GetAsyncResult(String[] res)
    {

        returnValues = res;
        Log.v("getResultSetValues","returnValues"+returnValues[1]);
    }


    public void getResultSetValues()
    {
        Log.v("getResultSetValues","returnValues"+returnValues[1]);


    }

}

}
public class MyTask extends AsyncTask<String, Void, String[]> {

private Activity activity;
private ProgressDialog dialog;
private AsyncTaskCompleteListener callback;
public String[] asyncResultSetValue = null;
public MyTask(Activity act) {
    Log.v("MY TASK","ACTIVITY"+act);
    this.activity = act;
    this.callback = (AsyncTaskCompleteListener)act;
}

@Override
protected void onPreExecute() {
    super.onPreExecute();

    Log.v("MY TASK","in ON PRE EXECUTE");
    dialog = new ProgressDialog(activity);
    dialog.setMessage("Loading...");
    dialog.show();
}

@Override
protected String[] doInBackground(String... params) {
    Log.v("MY TASK","DO IN BACKGROUND");
    Log.v("PARAMS"," params[0] = "+params[0]+ "| params[1]"+params[1]);
    asyncResultSetValue = Utils.process_query(params[0],params[1]);
    return asyncResultSetValue;
}

@Override
protected void onPostExecute(String[] result) {
    super.onPostExecute(result);
    Log.v("MY TASK","in ON POST EXECUTE");
    if (null != dialog && dialog.isShowing()) {
        dialog.dismiss();
    }
    callback.onTaskComplete(result);
}

}
package com.example.androidasynctask;
公共类MainActivity扩展活动实现AsyncTaskCompleteListener{
公共静态字符串[]异步结果;
字符串res[]=null;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
公共无效BTN单击(视图){
/*MyTask asyncTask=新建MyTask(此);
字符串[]asyncTaskResult=asyncTask.execute(“fetchCategory.php”,“1%Id%1”)*/
//AsyncTask asyncTaskRes=new MyTask(this).execute(“fetchCategory.php”,“1%Id%1”);
//新建MyTask(this.execute)(“fetchCategory.php”,“1%Id%1”);
MyTask asyncTask=(MyTask)new MyTask(this).execute(“fetchCategory.php”,“1%Id%1”);
if(asyncTask.getStatus().equals(asyncTask.Status.FINISHED)| asyncTask.getStatus().equals(asyncTask.Status.PENDING)){
asyncTask.execute();
}
否则{
Log.v(“在Else中”、“获取值”);
}
}
@凌驾
公共void onTaskComplete(字符串[]结果){
Log.v(“在任务完成时输入”,“VALUE=“+result[1]);
}
/*@凌驾
公共void onTaskComplete(字符串结果){
System.out.println(“调用onTaskComplete SIMPLE…”);
System.out.println(“结果::”+result);
}*/
公共静态类GetAsyncResult
{
静态字符串[]返回值;
公共GetAsyncResult()
{}
公共GetAsyncResult(字符串[]res)
{
返回值=res;
Log.v(“getResultSetValues”、“returnValues”+returnValues[1]);
}
public void getResultSetValues()
{
Log.v(“getResultSetValues”、“returnValues”+returnValues[1]);
}
}
}
异步任务代码:

package com.example.androidasynctask;


public class MainActivity extends Activity implements AsyncTaskCompleteListener {

public static String[] asyncResult;
String res[] = null;



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void btnclick(View view) {
    /*MyTask asyncTask = new MyTask(this);
    String [] asyncTaskResult = asyncTask.execute("fetchCategory.php","1%Id%1");*/

    //AsyncTask<String, Void, String[]> asyncTaskRes = new MyTask(this).execute("fetchCategory.php","1%Id%1");
    //new MyTask(this).execute("fetchCategory.php","1%Id%1");
    MyTask asyncTask = (MyTask) new MyTask(this).execute("fetchCategory.php","1%Id%1");

     if(asyncTask.getStatus().equals(AsyncTask.Status.FINISHED) || asyncTask.getStatus().equals(AsyncTask.Status.PENDING)) {
         asyncTask.execute();
     }
     else {

         Log.v("In Else","Get Value");
     }



}

@Override
public void onTaskComplete(String[] result) {
    Log.v("IN ON TASK COMPLETE","VALUE = "+result[1]);


}



/*@Override
public void onTaskComplete(String result) {
    System.out.println("calling onTaskComplete SIMPLE....");
    System.out.println("result :: "+ result);
}*/

public static class GetAsyncResult
{
    static String[] returnValues;


    public GetAsyncResult()
    {}
    public GetAsyncResult(String[] res)
    {

        returnValues = res;
        Log.v("getResultSetValues","returnValues"+returnValues[1]);
    }


    public void getResultSetValues()
    {
        Log.v("getResultSetValues","returnValues"+returnValues[1]);


    }

}

}
public class MyTask extends AsyncTask<String, Void, String[]> {

private Activity activity;
private ProgressDialog dialog;
private AsyncTaskCompleteListener callback;
public String[] asyncResultSetValue = null;
public MyTask(Activity act) {
    Log.v("MY TASK","ACTIVITY"+act);
    this.activity = act;
    this.callback = (AsyncTaskCompleteListener)act;
}

@Override
protected void onPreExecute() {
    super.onPreExecute();

    Log.v("MY TASK","in ON PRE EXECUTE");
    dialog = new ProgressDialog(activity);
    dialog.setMessage("Loading...");
    dialog.show();
}

@Override
protected String[] doInBackground(String... params) {
    Log.v("MY TASK","DO IN BACKGROUND");
    Log.v("PARAMS"," params[0] = "+params[0]+ "| params[1]"+params[1]);
    asyncResultSetValue = Utils.process_query(params[0],params[1]);
    return asyncResultSetValue;
}

@Override
protected void onPostExecute(String[] result) {
    super.onPostExecute(result);
    Log.v("MY TASK","in ON POST EXECUTE");
    if (null != dialog && dialog.isShowing()) {
        dialog.dismiss();
    }
    callback.onTaskComplete(result);
}

}
公共类MyTask扩展了AsyncTask{
私人活动;
私人对话;
私有AsyncTaskCompleteListener回调;
公共字符串[]asyncResultSetValue=null;
公共任务(活动法){
Log.v(“我的任务”、“活动”+行动);
这个活动=行动;
this.callback=(AsyncTaskCompleteListener)act;
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
Log.v(“我的任务”,“在预执行中”);
dialog=新建进度对话框(活动);
setMessage(“加载…”);
dialog.show();
}
@凌驾
受保护字符串[]doInBackground(字符串…参数){
Log.v(“我的任务”,“在后台做”);
Log.v(“参数”,“参数[0]=”+参数[0]+“|参数[1]”+参数[1]);
asyncResultSetValue=Utils.process_查询(参数[0],参数[1]);
返回asyncResultSetValue;
}
@凌驾
受保护的void onPostExecute(字符串[]结果){
super.onPostExecute(结果);
Log.v(“我的任务”,“在执行后”中);
if(null!=dialog&&dialog.isShowing()){
dialog.dismise();
}
callback.onTaskComplete(结果);
}
}
HTTP类代码:

 public class Utils {

    static String result = null;
    String endResult;
    static java.io.InputStream  is = null;
    static StringBuilder sb=null;
    static String delimiter = "\\|";            
    static String delimiter1 = "\\%";
    static String[] temp = null;
    static String[] temp1 = null;
    static ArrayList<NameValuePair> nameValuePairs;
    static Context context;
    static ProgressDialog mDialog;
    static HttpResponse response;
    static String[] resultset_value = null;
    //static String url = "http://fortuneworkinprogress.in/News_App/";  //Global URL
    static String url = "http://10.0.2.2/News_App/";    //Global URL
    static String query_type,parameter;     

    /*************** PROCESS QUERY START  ***************/
      public static String[] process_query(String str_url, String parameter) {
            // String strval = select_parameter;
        String ret_val[] = null;
        String get_sel_val[] = null;    
        int loopcount =0;
        url = url+str_url;                                                                  //!!!! ######### CONCATINATING AND CREATING FULL URL ######## !!!!!!//
        Log.v("PROCESS QUERY PARAMETER","URL = "+url+" | PARAMTER = "+parameter);
        nameValuePairs = new ArrayList<NameValuePair>();

        //Log.i("STR VAL",""+strval);       //To Check which values are recieved
        try
        {
            String strval = parameter;
            get_sel_val=strval.split(delimiter1);

            for(int i =0; i < get_sel_val.length ; i++)     
            {

                loopcount = Integer.parseInt(get_sel_val[0]);           // First Delimeted Value which tells the number of count
                Log.i("Loopcount","cnt = "+loopcount);

            }

            for(int j=1;j<=(loopcount*2);j=j+2)                         //For Loop for making Name Values Pares Dynamic
            {
                nameValuePairs.add(new BasicNameValuePair(get_sel_val[j],get_sel_val[j+1]));
                //Log.i("J = ["+j+"]","pairvalue1 = "+get_sel_val[j]+"pairvalue2 ="+get_sel_val[j+1]);
            }
        }
        catch(Exception e)
        {
            Log.w("Exception in the getting value","Exp = "+e);
        }

        //nameValuePairs.add(new BasicNameValuePair("id","1"));

        try{
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(url);
                Log.v("CONNECT URL   ","Final url "+url);
                Log.w("CONNECTION STATUS ",httppost.toString());
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                Log.w("PAERSE VALUE ",nameValuePairs.toString());
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                is = entity.getContent();
                Log.w("1", "Connection establised succesfuly");
           }
         catch(Exception e)
         {
             Log.e("log_tag", "Error in http connection"+e.toString());
         }

         try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                sb = new StringBuilder();
                sb.append(reader.readLine() + "\n");
                Log.v("SB VALUE = ","sb = "+sb.toString());
                String line="0";
                while ((line = reader.readLine()) != null) 
                {
                    sb.append(line + "\n");
                }
               is.close();
               result=sb.toString();

                //  Toast.makeText(getBaseContext(), result ,Toast.LENGTH_LONG).show();

                Log.w("result", result);
            }
          catch(Exception e)
          {
              Log.e("log_tag", "Error converting result "+e.toString());
              Toast.makeText(null, "error converting response to string" ,Toast.LENGTH_LONG).show();
          }

         String[] temp = null;
         String[] tempResult = null;

         if(result!=null)
         {
             tempResult = result.split(delimiter);                  //Split the entire return string into "rows"
             for(int i =0; i < tempResult.length-1 ; i++)       
              {
                 temp = null;   
                 temp = tempResult[i].split(delimiter1);        //Find columns for each row
                 ret_val = temp;
                 resultset_value=ret_val;
              }
        }
        else
        {
            Toast.makeText(null, "Cannot Find Routes" ,Toast.LENGTH_LONG).show();
        }

         Log.v("BEFORE RETUNR = ","ret_val = "+ret_val.toString());
         return ret_val;                                            //Returning the result value array
    }


                    /*************** PROCESS QUERY ENDS ***************/

      public static boolean isNetworkAvailable(Activity activity) 
      {
        ConnectivityManager connectivity = (ConnectivityManager) activity
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity == null) 
        {
            return false;
        } 
        else
        {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null) 
            {
                for (int i = 0; i < info.length; i++) {
                    if (info[i].getState() == NetworkInfo.State.CONNECTED) 
                    {
                        return true;
                    }
                }
            }
        }
        return false;
    }

}
公共类Utils{
静态字符串结果=null;
字符串结束结果;
静态java.io.InputStream为空;
静态StringBuilder sb=null;
静态字符串分隔符=“\\\\;”;
静态字符串分隔符1=“\\%”;
静态字符串[]temp=null;
静态字符串[]temp1=null;
静态ArrayList nameValuePairs;
静态语境;
静态进程对话框mDialog;
静态HttpResponse响应;
静态字符串[]resultset_value=null;
//静态字符串url=”http://fortuneworkinprogress.in/News_App/“;//全局URL
静态字符串url=”http://10.0.2.2/News_App/“;//全局URL
静态字符串查询类型,参数;
/***************进程查询启动***************/
公共静态字符串[]进程查询(字符串str\u url,字符串参数){
//String strval=选择_参数;
字符串ret_val[]=null;
字符串get_sel_val[]=null;
int loopcount=0;
url=url+str#url;///
Log.v(“过程查询参数”,“URL=“+URL+”|参数=“+PARAMETER”);
nameValuePairs=新的ArrayList();
//Log.i(“STR VAL”,“”+strval);//检查接收到的值
尝试
{
字符串strval=参数;
get_sel_val=strval.split(delimiter1);
for(int i=0;i
   @Override
public void onTaskComplete(String[] result) {
    Log.v("IN ON TASK COMPLETE","VALUE = "+result[1]);


}
    if(asyncTask.getStatus().equals(AsyncTask.Status.FINISHED) || asyncTask.getStatus().equals(AsyncTask.Status.PENDING)) {
     asyncTask.execute();
 }
 else {

     Log.v("In Else","Get Value");
 }
   @Override
public void onTaskComplete(String[] result) {
    Log.v("IN ON TASK COMPLETE","VALUE = "+result[1]);
    Log.v("IN ON TASK COMPLETE","VALUE = "+asyncResult[1]);

}