2016-02-28 80 views
1

有人可以帮助我如何在onPostExecute中调用新活动或在asynctask中添加意图?如何在asynctask中调用intent?或者如何在onPostExecute中开始新的活动?

我的代码是这样的..

backgroundtask.java

AlertDialog alertDialog; 

Context ctx; 

BackgroundTask(Context ctx) { 
    this.ctx = ctx; 
} 

@Override 
protected void onPreExecute() { 
    alertDialog = new AlertDialog.Builder(ctx).create(); 
    alertDialog.setTitle("Login Information.."); 
} 

@Override 
protected String doInBackground(String... params) { 
    String reg_url = "http://10.0.2.2/webapp/register.php"; 
    String login_url = "http://10.0.2.2/webapp/login.php"; 
    String method = params[0]; 
    if (method.equals("register")) { 

     String name = params[1]; 
     String user_name = params[2]; 
     String user_pass = params[3]; 

     try { 
      URL url = new URL(reg_url); 
      HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
      httpURLConnection.setRequestMethod("POST"); 
      httpURLConnection.setDoOutput(true); 
      OutputStream OS = httpURLConnection.getOutputStream(); 
      BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(OS, "UTF-8")); 
      String data = URLEncoder.encode("name", "UTF-8") + "=" + URLEncoder.encode(name, "UTF-8") + "&" + 
        URLEncoder.encode("user_name", "UTF-8") + "=" + URLEncoder.encode(user_name, "UTF-8") + "&" + 
        URLEncoder.encode("user_pass", "UTF-8") + "=" + URLEncoder.encode(user_pass, "UTF-8"); 
      bufferedWriter.write(data); 
      bufferedWriter.flush(); 
      bufferedWriter.close(); 
      OS.close(); 
      InputStream IS = httpURLConnection.getInputStream(); 

      IS.close(); 
      return "Registration Success.."; 

     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } else if (method.equals("login")) {//EDITED 

     String login_name = params[1]; 
     String login_pass = params[2]; 

     try { 
      URL url = new URL(login_url); 
      HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
      httpURLConnection.setRequestMethod("POST"); 
      httpURLConnection.setDoOutput(true); 
      httpURLConnection.setDoInput(true); 
      OutputStream outputStream = httpURLConnection.getOutputStream(); 
      BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
      String data = URLEncoder.encode("login_name", "UTF-8") + "=" + URLEncoder.encode(login_name, "UTF-8") + "&" + 
        URLEncoder.encode("login_pass", "UTF-8") + "=" + URLEncoder.encode(login_pass, "UTF-8"); 
      bufferedWriter.write(data); 
      bufferedWriter.flush(); 
      bufferedWriter.close(); 
      outputStream.close(); 

      InputStream inputStream = httpURLConnection.getInputStream(); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1")); 
      String response = ""; 
      String line = ""; 
      while ((line = bufferedReader.readLine()) != null) { 
       response += line; 
      } 


      bufferedReader.close(); 
      inputStream.close(); 
      httpURLConnection.disconnect(); 
      return response; 


     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 


    return null; 
} 


@Override 
protected void onProgressUpdate(Void... values) { 
    super.onProgressUpdate(values); 
} 

@Override 
protected void onPostExecute(String result) { 
    if (result.equals("Registration Success..")) { 
     Toast.makeText(ctx, result, Toast.LENGTH_LONG).show(); 
     //startActivity(new Intent(this, welcome.class)); 



    } else { 
     alertDialog.setMessage(result); 
     alertDialog.show(); 
    } 

} 

}

MainActivity.java这是我的登录类

EditText ET_NAME, ET_PASS; 
String login_name, login_pass; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.content_main); 

    ET_NAME = (EditText)findViewById(R.id.user_name); 
    ET_PASS = (EditText)findViewById(R.id.user_pass); 

} 
public void userReg(View view) { 
    startActivity(new Intent(this,Register.class)); 

} 
public void userLogin(View view) { 

    login_name = ET_NAME.getText().toString(); 
    login_pass = ET_PASS.getText().toString(); 
    String method = "login"; 
    BackgroundTask backgroundTask = new BackgroundTask(this); 
    backgroundTask.execute(method, login_name, login_pass); 
} 

即时通讯新到Android的希望你可以帮助我..这段代码没有错误btw ..我只想调用另一个类而不是对话框表示欢迎的框..

+1

你面临什么问题? –

+0

'ctx.startActivity(new Intent(ctx,welcome.class));'在'if'条件下在'onPostExecute'中添加此行条件 – ELITE

回答

0

在你的postExecute方法。

@Override 
protected void onPostExecute(String result) { 
    if (result.equals("Registration Success..")) { 

     Toast.makeText(ctx, result, Toast.LENGTH_LONG).show(); 
     Intent intent = new Intent(ctx, welcome.class); 
     startActivity(intent); 

    } else { 
     alertDialog.setMessage(result); 
     alertDialog.show(); 
    } 
} 
+0

嗨..感谢伟大的代码先生..似乎问题出在我的'字符串响应'..我应该用在我的'if(result.equals(“Welcome ..”))'“欢迎..”在我的PHP文件中.. – Dodots

+0

很高兴知道你解决了这个问题: ) –

0

完成这件事AsyncTask

if (result.equals("Registration Success..")) { 
    Toast.makeText(ctx, result, Toast.LENGTH_LONG).show(); 
    ctx.startActivity(new Intent(ctx, welcome.class)); 
} 

onPostExecute方法,它会打开新的活动。

0

只需意图使用Context这是你的情况ctx

Intent intent = new Intent(ctx, Welcome.class); 
     ctx.startActivity(intent); 
     ((Activity)ctx).finish(); 
0

使用ctx.startActivity(intent)开始活动。

0

您可以使用此

@Override 
protected void onPostExecute(String result) { 
    if (result.equals("Registration Success..")) { 
    Toast.makeText(ctx, result, Toast.LENGTH_LONG).show(); 

    Intent login = new Intent(ctx, MainActivity.class); 
    login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    ctx.startActivity(login); 
    ((Activity) ctx).finish(); 


    } else { 
    alertDialog.setMessage(result); 
    alertDialog.show(); 
    } 

} 
相关问题